首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何用Pandas在Python中实现快速拼写检查?

如何用Pandas在Python中实现快速拼写检查?
EN

Stack Overflow用户
提问于 2018-08-16 04:18:06
回答 1查看 1.6K关注 0票数 2

我在文本挖掘问题上工作,需要提取所有提到的某些关键字。例如,给定列表:

代码语言:javascript
复制
list_of_keywords = ['citalopram', 'trazodone', 'aspirin']

我需要找到文本中关键字的所有匹配项。使用Pandas很容易做到这一点(假设我的文本是从csv文件中读入的):

将熊猫作为pd导入

代码语言:javascript
复制
df_text = pd.read_csv('text.csv')
df_text['matches'] = df_text.str.findall('|'.join(list_of_keywords))

然而,文本中有拼写错误,有时我的关键字会写成:

代码语言:javascript
复制
'citalopram' as 'cetalopram'

代码语言:javascript
复制
'trazodone' as 'trazadon'

在网上搜索,我发现了一些如何实现spell checker的建议,但我不确定在哪里插入拼写检查器,我估计它可能会在非常大的文本情况下减慢搜索速度。

作为另一种选择,有人建议使用带有正则表达式的通配符,并在可能的混淆位置插入(从概念上讲是编写的)。

代码语言:javascript
复制
.findall('c*t*l*pr*m')

然而,我不相信我可以捕获所有可能存在问题的案例。我尝试了一些开箱即用的拼写检查器,但我的文本是一些特定的,我需要一个‘知道’我的领域(医学领域)的拼写检查器。

问题

有没有什么有效的方法从文本中提取关键字,包括拼写错误?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-16 04:27:56

你是对的,你不能用正则表达式捕获所有可能的拼写错误。

但是,您确实有选择。

你可以

  • 使用trie。许多自动补全和拼写检查解决方案都使用尝试。然而,它们中的大多数都是逐字操作的。不是在整个文本上
  • 说,你真正想要的是一个模糊的文本提取器,因为你只是想要匹配替换/轻微错误的拼写,而不是纠正文本中的这些拼写。所以你在这里也有更多的选择,
    • 计算基因组学有这个挑战,他们想要搜索长序列中的碱基对模式。它们允许匹配文本中存在一定程度的不匹配。因此,类似于here概述的近似匹配解决方案将有所帮助。这些幻灯片很好地利用了鸽洞原理来做你需要的事情,而且代码也是开源的!
    • 如果你想要简单得多的东西,只需要在文档的所有单词上运行编辑距离过滤器,只允许编辑距离为k或less.

的单词

将对我所说的编辑距离进行扩展

(图片/代码借用自上面链接的幻灯片,任何人都可以免费使用幻灯片,即没有许可证)

让我们研究一个更简单的概念Hamming Distance

代码语言:javascript
复制
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个字符串上交换/插入/删除的字符数,以使它们相等

汉明距离现在成为递归算法的基本情况

代码语言:javascript
复制
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以使其更快,因为重叠的可能性很高。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51865832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档