我在文本挖掘问题上工作,需要提取所有提到的某些关键字。例如,给定列表:
list_of_keywords = ['citalopram', 'trazodone', 'aspirin']
我需要找到文本中关键字的所有匹配项。使用Pandas很容易做到这一点(假设我的文本是从csv文件中读入的):
将熊猫作为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')
然而,我不相信我可以捕获所有可能存在问题的案例。我尝试了一些开箱即用的拼写检查器,但我的文本是一些特定的,我需要一个‘知道’我的领域(医学领域)的拼写检查器。
问题
有没有什么有效的方法从文本中提取关键字,包括拼写错误?
发布于 2018-08-16 04:27:56
你是对的,你不能用正则表达式捕获所有可能的拼写错误。
但是,您确实有选择。
你可以
k
或less.的单词
将对我所说的编辑距离进行扩展
(图片/代码借用自上面链接的幻灯片,任何人都可以免费使用幻灯片,即没有许可证)
让我们研究一个更简单的概念Hamming Distance
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
Hamming distance返回两个等长字符串之间必须交换的字符数,以使它们相等。
但是当字符串长度不相等时会发生什么呢?
使用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)
只需根据您认为单词将/应该匹配的内容调用上面的函数(可能是通过首先查找trie)。您甚至可以记住soln以使其更快,因为重叠的可能性很高。
https://stackoverflow.com/questions/51865832
复制相似问题