- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我必须根据名称将一些酒店归入同一类别。我正在使用 levenshtein 进行分组,但我已经尝试了多少,一些酒店被留在了他们应该属于的类别之外,或者在另一个类别中。
例如:所有这些酒店应该属于同一类别:
=============================
贝西左岸最佳西方酒店
贝斯特韦斯特科利塞
最佳西方勃艮第公爵
最佳西方福克斯通歌剧院
法国欧洲最佳西方酒店
悉尼歌剧院贝斯特韦斯特酒店
最佳西方巴黎卢浮宫歌剧院
德纽维尔贝斯特韦斯特酒店
=============================
我有一个包含所有酒店名称的列表(例如 1000 行)。我也有他们应该如何分组。知道如何优化 levenshtein,使其更适合我的情况吗?
$inserted = false;
foreach($hotelList as $key => $value){
if (levenshtein($key, $hotelName, 2, 5, 1) <= abs(strlen($key) - strlen($hotelName))){
array_push($hotelList[$key], trim($line));
$inserted = true;
}
}
// if no match was found add another entry
if (!$inserted){
$hotelList[$hotelName] = array(
trim($line)
);
}
最佳答案
我会深入思考。首先,像这样对数据进行分组或“聚类”是一个很大的话题,我不会真正深入探讨它,但也许会指出一个理想的方向。
您通过根据所比较的字符串的长度对 Levenshtein 进行归一化来做了一件绝妙的事情 - 这是完全正确的,因为您避免了字符串长度在许多情况下过度确定相似性的问题。
但是算法并没有解决问题。首先,我们要比较单词。 “Bent Eastern French Hotels”显然与“Best Western French Hotels”截然不同,但比“Best Western Paris Bed and Breakfasts”得分更高。这里的直觉是你的标记不应该是字符,而是单词。
我喜欢@saury 的回答,但我不确定一开始的假设。相反,让我们从通常称为“bag of words”的好东西开始。然后我们实现一个 hashing技巧,这将允许您根据最少使用的单词包含最多信息的直觉来识别关键短语。
如果您同意酒店品牌名称位于开头附近的想法,您也可以始终歪曲它们与字符串开头的接近程度。问题是,您的团队很可能最终会成为“法国”而不是“最佳”/“西方”(但不是“酒店”- 为什么?)。
您想让您的结果更准确吗?
从现在开始,我们将不得不采取一些严肃的算法 - 享受浏览许多堆栈溢出主题。我的直觉是,我敢打赌,许多酒店名称都不是品牌,因此您也需要为它们设置不同的类别。而且我的直觉是也酒店名称中重复单词的数量将相对较少-一些单词将是酒店名称的常见成员。这些事实将成为上述问题。在这种情况下,有一种非常流行的(如果对 SO 来说是陈词滥调)技术称为 k-means,一个有趣的介绍是扩展像 this 这样的算法。 (非常 勇敢地用 php 编写)将您选择的 n 个关键短语作为集群的 n 维,然后取集群的大多数组件center-points 作为你的分类标签。 (例如,这将消除“France”,因为“France”的点击将相当均匀地分布在 n 维空间中)。
对于看似小问题的事情来说,这可能有点繁重 - 但我想强调的是,如果您的数据不是结构化的,那么正确处理事情确实没有任何捷径.
关于php - Levenshtein - 分组酒店名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17466794/
我正在寻找 Damerau–Levenshtein 的实现PHP 的算法,但我的 friend google 似乎找不到任何东西。到目前为止,我必须使用 PHP 实现的 Levenshtein(没有
我坐在这里用 Java 为我的主程序编写一些算法(这是迄今为止的第一个)。我对 levenshtein 算法进行了很好的编程,这要归功于 wiki 对新手的伪代码非常好,还有一个很好的教程 :D 然后
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 问题必须表现出对正在解决的问题的最低限度的理解。告诉我们您尝试过的方法、为什么不起作用以及它应该 起作用
similar_text()中文汉字版 复制代码 代码如下: <?php &nbs
我实现了一个 levenshtein trie 来查找与给定单词相似的单词。 我的目标是有一种快速的方法来进行拼写纠正。 但是我发现有一种更快的方法可以做到这一点: 莱文斯坦自动机 我只是有一个问题.
说我的数据库中有以下两个字符串: (1) 'Levi Watkins Learning Center - Alabama State University' (2) 'ETH Library' 我的软
这是一个字符串 T : 'men shirt team brienne funny sarcasm shirt features graphic tees mugs babywear much rea
我想使用字符串相似度函数来查找数据库中损坏的数据。 我遇到了其中几个: 贾罗, 贾罗-温克勒, 编辑, 欧几里得和 Q-gram, 我想知道它们之间有什么区别以及它们在什么情况下效果最好? 最佳答案
我需要一些有关以下代码的帮助。在这种情况下,我需要找到与输入的单词最接近的单词来测试我将 word_0 设置为“pikaru”,它应该返回“pikachu”。 levenshtein 函数返回我们输入
我有一个脚本可以使用 Levenshtein 在数据库中搜索单词。当我搜索英文单词时一切正常,但是当我搜索俄语单词时,MySQL 控制台报错: [22007][1366] (conn=31079) I
列支敦士登在c编程中总是返回无限循环这是我的代码我尝试了很多解决方案并且我尝试存储变量并使用指针但总是有无限循环我认为这是因为3个递归调用但在列支敦士登算法的文档中我找到了这个实现 #include
有什么方法可以对数组使用 Levenshtein Distance例如我有一个包含多个文本的 div one,two,three,longtext,anything 和一个输入 // sometex
这是我为了好玩而编写的 Levenshtein 距离的并行实现。我对结果很失望。我在核心 i7 处理器上运行它,所以我有很多可用线程。但是,当我增加线程数时,性能会显着下降。我的意思是,对于相同大小的
我想对 mysql 查询结果执行编辑。 查询如下所示: $query_GID = "select `ID`,`game` from `gkn_catalog`"; $result_GID = $dbc
我有包含两个相似字符的字符串。两者都显示为带有 ogonek 的小“a”: ± ± (注意:根据渲染器,它们有时呈现相似,有时略有不同) 但是,它们是不同的: 第一个字符的特征: 在 PostgreS
我有一个足够有效的查询,但我想通过在查询参数和相关字段之间使用 levenshtein 对结果进行排序。 现在我在 ES 中进行查询,然后在我的应用程序中进行排序。现在我正在测试脚本字段。这是脚本 i
我使用此查询来搜索公司详细信息 select * from company_details where levenshtein_ratio('New York Life Insurance Compa
我正在寻找一个字符串比较指标 ala Levenshtein,当字符串中的字符被打乱时,它也可以工作。有谁知道这样的指标?如果有一个 Python 模块可以计算这样的指标,那就太好了。谢谢! 最佳答案
R 中有一个名为stringdist 的package,它包含计算Levenshtein 字符串距离的函数。这个包有两个问题: 1st 它不适用于大字符串,例如: set.seed(1) a.str
我正在编写一个使用比较来确定模糊匹配的脚本,因此我正在使用 Levenshtein 功能。 不幸的是,当我在终端窗口中运行 easy_install python-Levenshtein 时,当我在其
我是一名优秀的程序员,十分优秀!