我致力于文本挖掘问题,需要提取所有提到的某些关键字。例如,给定列表:
list_of_keywords = ['citalopram', 'trazodone', 'aspirin']
我需要找到文本中所有出现的关键字。这可以使用 Pandas 轻松完成(假设我的文本是从 csv 文件读取的):
将 pandas 导入为 pd
df_text = pd.read_csv('text.csv')
df_text['matches'] = df_text.str.findall('|'.join(list_of_keywords))
但是,文字中存在拼写错误,有时我的关键字会写成:
'citalopram' as 'cetalopram'
或
'trazodone' as 'trazadon'
在网上搜索,我发现了一些如何实现 spell checker 的建议,但我不确定在哪里插入拼写检查器,并且我认为在文本非常大的情况下它可能会减慢搜索速度。
作为另一种选择,建议使用带有正则表达式的通配符,并插入到可能混淆的位置(概念上编写)
.findall('c*t*l*pr*m')
但是,我不相信我可以捕获所有可能的问题案例。我尝试了一些现成的拼写检查器,但我的文本有些具体,我需要一个“了解”我的领域(医学领域)的拼写检查器。
问题
是否有任何有效的方法可以从文本中提取关键字(包括拼写错误)?
最佳答案
你是对的,你无法用正则表达式捕获所有可能的拼写错误。
但是您确实有选择。
你可以
- 使用 trie 。许多自动完成和拼写检查解决方案都使用尝试。然而,它们中的大多数都是逐字操作的。不考虑整个文本 话虽如此,您真正想要的是一个模糊文本提取器,因为您只想匹配备用/稍微错误的拼写,而不是更正文本中的这些拼写。所以你在这里也有更多选择
- 计算基因组学面临着这一挑战,他们想要搜索长序列中的碱基对模式。它们允许匹配文本中存在一定程度的不匹配。因此,近似匹配解决方案如概述的 here会有帮助的。这些幻灯片很好地利用了鸽子洞原理来完成您需要的事情,并且代码也是开源的!
- 如果您想要不太复杂的内容,只需对文档的所有单词运行编辑距离过滤器,并仅允许编辑距离为
k
或更小的单词。
扩展编辑距离的含义
(从上面链接的幻灯片借用的图像/代码,幻灯片可供任何人免费使用,即无需许可证)
让我们研究一个更简单的概念:汉明距离
def hammingDistance(x, y):
assert len(x) == len(y)
nmm = 0
for i in xrange(0, len(x)):
if x[i] != y[i]:
nmm += 1
return nmm
汉明距离返回必须在 2 个等长字符串之间交换才能使它们相等的字符数。
但是当字符串长度不相等时会发生什么?
使用editDistance这是必须在2个字符串上交换/插入/删除以使它们相等的字符数
汉明距离现在成为递归算法的基本情况
def edDistRecursive(x, y):
if len(x) == 0: return len(y)
if len(y) == 0: return len(x)
delt = 1 if x[-1] != y[-1] else 0
diag = edDistRecursive(x[:-1], y[:-1]) + delt
vert = edDistRecursive(x[:-1], y) + 1
horz = edDistRecursive(x, y[:-1]) + 1
return min(diag, vert, horz)
只需根据您认为该单词将/应该匹配的内容调用上面的函数(也许首先查找字典树)。您甚至可以记住解决方案以使其更快,因为重叠的可能性很高
关于python - 如何使用 Pandas 在 Python 中实现快速拼写检查器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51865832/