我正在处理手写的文本数据,因此它存在很多字形错误。我目前正在与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秒。
答案 0 :(得分:0)
如果您要做的只是从遇到的拼错单词到建议之间创建映射,则可以通过删除重复的单词来减少数据集的大小。这样可以最大程度地减少对spell.unknown
和spell.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)