【发布时间】:2021-03-22 14:21:14
【问题描述】:
我试图有效地找到一个短语和一个大型语料库之间的相似性。例如,假设我的语料库是书 Moby Dick。这本书有几万字。
除此之外,我还有一些简短的短语。例如:
phrase1 = "Call me Ishmael" # This is the first sentence in the book exactly.
phrase2 = "Call me Isabel" # This is like the previous with changes of few letters from the third word.
phrase3 = "Call me Is mael" #It's a similar sentence but one word split in two.
除此之外,我当然还有很多其他的句子和书中的句子不相似。
我想知道识别与书中句子相似的句子的通用且有效的方法是什么。
我尝试过哪些对我来说似乎不太合适的事情?
- 我将所有输入句子分成 3/4/5/6 个 n-gram。
- 我将所有语料库句子分成 3/4/5/6 个 n-gram。
- 然后我尝试在语料库 n-gram 和输入 n-gram 的所有可能组合之间找到近似匹配(使用
FuzzySet)(即使是单词拆分或合并的情况,也需要这些组合。)李>
我很清楚,这种方法非常浪费,而且可能也不是最适合我的需要。我很想知道如何最好地做到这一点。
【问题讨论】:
-
也许你可以使用字符串编辑距离算法。一种非常低效的方法是计算到给定长度的文本的所有子字符串的字符串编辑距离(例如输入字符串的大小)
-
@Stefan 所有非空子串的数量为 n*(n+1)/2 其中 n == length(Moby dick) 它是数十亿个子串...
-
你研究过 Jaccard 相似度吗? en.m.wikipedia.org/wiki/Jaccard_index
-
@nablag 但是如何在短文本和超长文本中使用它?
-
@Yanirmr 提出了一种滑动窗口方法。首先比较子字符串 1..m,然后是 2..m+1,然后是 3..m+2,等等。正如我所说的非常低效,大约 n 个字符串编辑距离。 (并且不明显如何选择 m。它可能是 m=len(inputstring),但这取决于您期望找到的内容)
标签: python text nlp fuzzy-search corpus