首先,我不是在寻找实际的模糊匹配算法。我们同时使用骰子系数和编辑距离。我正在寻找利用这些算法的最聪明的方法。
目标:
我正在尝试按文本段落中出现的顺序检测城市名称。我们有大约 100 万个地点名称的列表。我想搜索一段文本,并检测这些位置之一何时存在,然后存储该城市。地点名称可以是单个或多个单词。
示例段落:
嗨妈妈!萨姆和我正在考虑下个月穿越加拿大的公路旅行。我们知道我们已经可以住在约翰在魁北克市的家里了。我知道你在加拿大旅行过很多次,所以我想听听您的建议。
就像我说的,我们将从魁北克市出发,然后可能开车到 米拉米奇,然后前往哈利法克斯。两天后我们要去 布雷顿角。最后,我们想去艾德维科特港看看芬迪湾、迪格比和圣伊丽莎白码头等景点
以后再聊!
预期成绩
问题
我当前的障碍是如何检测包含多个单词的位置名称。我知道我可以将段落分成单词,然后将它们与我的列表进行比较,例如:
这是我目前的方法,但速度非常慢且效率低下。有没有一种聪明的方法可以实现我正在寻找的目标?
如何匹配不精确且单词顺序不同的字符串。通常,字符串具有相似的数字模式,但单词的顺序可能不同。
例如,我会考虑字符串的良好匹配:
目标字符串:Apple 10mg/51L Tail
测试字符串:(Tail 10mg/51L Apple只是打乱单词,拼写正确)
我还会考虑以下字符串之间的良好匹配:
测试字符串:(51L MissleadingLENWord ObfuscateTail 10mg Apple如果我们使用LIKE子句逐个检查每个单词,则可以在测试字符串中找到目标字符串的所有单词,即可以在单词“ObfuscateTail”的测试字符串中找到目标字符串的“Tail”)。
我想在返回百分比数字的函数中看到这个问题的解决方案,这意味着字符串有多相似 - 零 - 字符串不同,100% 两个字符串是相同的。
我应该使用哪种算法?如果可以用 SQL Server 来实现那就最好了。
我可以找到这里提出的一些算法:Fuzzy Matching using T-SQL。主要答案中提到的编辑距离算法是否适合单词的混合顺序?
如何在 VS Code 和 IntelliSense 中搜索包含部分单词的符号(例如类)?
在 VS Code 中,可以查找包含部分单词的文件。例如,可以this_is_my_best_class.py通过文件搜索和键入来定位文件thisbest。但类似的方法似乎不适用于符号。
假设您有一个名为 的类MyBestInheritedIntelliSenseClass,并且您想从工作空间中找到它。有没有一种方法可以通过键入类似的内容来查找符号,BestIntelSen而不是键入整个符号MyBestInheritedIntelliSen?
我正在使用 VS Code(v1.41.1,Windows)和 Python 扩展(v2020.1.58038)。
我已经使用 PyCharm 很长时间了,现在换成 VS Code 看看它是什么。如上所述,我会在 PyCharm 中查找符号,并且作为一个老习惯,我会在 VS Code 中使用类似的方法。正确的做法是什么?
这与屏幕截图相同。这是我可以寻找的类(VS Code):
这就是我想要输入的内容(VS Code):
这就是我希望看到的(来自 PyCharm):
这与 VS Code 中的文件的工作原理相同:
我正在编写一个程序,将较小的游戏标题列表与许多游戏的主列表进行比较,以查看较小列表中的哪些游戏比其他游戏与主列表中的游戏标题更匹配。为了做到这一点,我一直在检查较小列表中的每个游戏与主列表中的每个游戏之间的编辑距离(以百分比形式),并取所有这些值中的最大值(最大百分比越低,游戏必须更加独特)同时使用difflib和fuzzywuzzy模块。我遇到的问题是,使用 或 的典型搜索process.extractOne()每个difflib.get_close_matches()游戏大约需要 5 秒以上(主列表中有 38000 多个字符串),并且我有大约 4500 个游戏需要搜索(5 * 4500 大约需要 6 小时)和 15 分钟,我没有时间)。
为了找到一种更好更快的方法来搜索字符串列表,我在这里询问 python 中搜索字符串和字符串列表之间最高百分比 Levenshtein 距离的最快方法是什么。如果没有比使用上面两个函数或编写其他循环代码更好的方法,请这么说。
我专门用于搜索最大距离的两个函数是:
metric = process.extractOne(name, master_names)[1] / 100
metric = fuzz.ratio(name, difflib.get_close_matches(name, master_names, 1, 0)[0]) / 100
Run Code Online (Sandbox Code Playgroud) 假设我有三个示例字符串
text1 = "Patient has checked in for abdominal pain which started 3 days ago. Patient was prescribed idx 20 mg every 4 hours."
text2 = "The time of discomfort was 3 days ago."
text3 = "John was given a prescription of idx, 20mg to be given every four hours"
Run Code Online (Sandbox Code Playgroud)
如果我得到 text2 和 text3 与 text1 的所有匹配子字符串,我会得到
text1_text2_common = [
'3 days ago.',
]
text2_text3_common = [
'of',
]
text1_text3_common = [
'was',
'idx'
'every'
'hours'
]
Run Code Online (Sandbox Code Playgroud)
我正在寻找的是模糊匹配,使用诸如Levenshtein distance …
我正在构建一个Android应用程序,它采用字符串输入并使用Google API返回排名的书籍列表.
我正在寻找一种方法来比较用户输入的开放式字符串,以及列表中的第一项,以查看他们输入的内容是否"可能"是一本书.我有大量关于书籍,标题,作者,描述等的信息,所以我可以搜索任何部分.
一个例子是:
'eyre affair fforde', 'fforde eyre affair', 'the eyre affair' ----> 'Likely' to be 'The Eyre Affair by Jasper Fforde'
最好的方法是什么?我已经看过levenshtein距离,但是不认为它可以用这种开放式输入,n-gram似乎是一个很好的方法,或模糊匹配.
还有其他想法吗?
我正在寻找一种以编程方式和语法高效的方式来搜索基于时间戳的值.基本上我想找到最接近的时间戳匹配...
比如我在MySQL表中说:
ID TIME Blob
1 4:03:10 abc
2 4:04:30 def
3 4:04:45 ghi
Run Code Online (Sandbox Code Playgroud)
我想根据时间4:04:40查询此表.我想要返回记录ID#3 ...如果我搜索4:04:35我想要返回ID#2 ...我该如何实现这个?我在这张桌子上有数百万行,我在想像levenshtein dist这样的东西会太慢......?
干杯!
我想在查询上使用模糊匹配,但在结果的顶部显示完全匹配.
我尝试了以下内容.
$return = $this->_client->search(
array(
'index' => self::INDEX,
'type' => self::TYPE,
'body' => array(
'query' => array(
'bool' => array(
'must' => array(
'multi_match' => array(
'query' => $query,
'fields' => array('name', 'brand', 'description'),
'boost' => 10,
),
'fuzzy_like_this' => array(
'like_text' => $query,
'fields' => array('name', 'brand', 'description'),
'fuzziness' => 1,
),
),
),
),
'size' => '5000',
),
)
);
Run Code Online (Sandbox Code Playgroud)
由于格式错误的查询错误,这不起作用.
有任何想法吗?
在Eclipse中使用快速切换编辑器(ctrl + E)可以浏览当前打开的选项卡。困扰我的是:您必须使用通配符(*)来执行模糊搜索。使用支持模糊搜索的Open Type(ctrl + shift + T)功能然后使用Quick Switch Editor似乎更方便。
我有没有想念的Eclipse配置或插件可以改善我的生活?
亲切的问候。