替换Python系列字符串中不正确单词的有效方法

时间:2019-04-22 19:32:25

标签: python pandas nlp

我正在处理手写的文本数据,因此它存在很多字形错误。我目前正在与pyspellchecker一起清理数据,并且正在使用correct()方法来查找单词不存在时最可能出现的单词。我的方法是创建一个字典,将所有写得不好的单词作为键,最可能的单词作为值:

dic={}
for i in df.text:
    misspelled = spell.unknown(i.split())
    for word in misspelled:
        dic[word]=spell.correction(word)

即使此方法有效,但执行速度却非常缓慢。因此,我想知道是否有更快的选择来实现这一点。你有什么想法吗?

编辑:df.text中有10571行,字符串通常为5-15个字长。每个循环大约需要3-5秒,因此整个循环总共需要大约40000秒。

2 个答案:

答案 0 :(得分:0)

如果您要做的只是从遇到的拼错单词到建议之间创建映射,则可以通过删除重复的单词来减少数据集的大小。这样可以最大程度地减少对spell.unknownspell.correction的调用次数,并防止不必要地更新字典的内容。

uniquewords = set().union(*(sentence.split() for sentence in df.text))
corrections = {word: spell.correction(word) for word in spell.unknown(uniquewords)}

答案 1 :(得分:0)

您可以尝试pd.apply而不是执行循环:

eng = pd.Series(['EmpName', 'EMP_NAME', 'EMP.NAME', 'EMPName', 'CUSTOMIR', 'TIER187CAST', 'MultipleTIMESTAMPinTABLE', 'USD$'])
eng = eng.str.lower()
eng = eng.str.split()
spell = SpellChecker()
def msp(x):
    return spell.unknown(x)
eng.apply(msp)