gpt4 book ai didi

python - Peter Norvig 的分词问题 : how can I segment words with misspellings inside?

转载 作者:行者123 更新时间:2023-11-28 18:20:24 27 4
gpt4 key购买 nike

我想了解 Peter Norvig 的拼写校正器是如何工作的。

关于他的 jupyter-notebook 标题 here他解释说,如何在没有空格分隔单词的情况下分割字符序列。它工作正常,当顺序中的所有单词都写正确时:

>>> segment("deeplearning")
['deep', 'learning']

但是当序列中的单词(或某些单词)拼写错误时,它会出错:

>>> segment("deeplerning")
['deep', 'l', 'erning']

不幸的是,我不知道如何解决这个问题并使 segment() 函数处理拼写错误的连接词。

有人知道如何处理这个问题吗?

最佳答案

可以通过 Peter Norvig 的 algorithm 实现有微小的变化。诀窍是在字母表中添加一个空格字符,并将所有由空格字符分隔的二元组视为一个唯一的单词。

由于 big.txt 不包含 deep learning 二元语法,我们必须在字典中添加更多文本。我会用wikipedia library (pip install wikipedia) 获取更多文本。

import re
import wikipedia as wiki
import nltk
from nltk.tokenize import word_tokenize
unigrams = re.findall(r"\w+", open("big.txt").read().lower())
for deeplerning in wiki.search("Deep Learning"):
try:
page = wiki.page(deeplerning).content.lower()
page = page.encode("ascii", errors="ignore")
unigrams = unigrams + word_tokenize(page)
except:
break

我将创建一个包含所有 unigrams 和 bigrams 的新字典:

fo = open("new_dict.txt", "w")
for u in unigrams:
fo.write(u + "\n")
bigrams = list(nltk.bigrams(unigrams))
for b in bigrams:
fo.write(" ".join(b)+ "\n")
fo.close()

现在只需在edits1 函数中的letters 变量中添加一个space 字符,将big.txt 更改为new_dict.txt 并更改此函数:

def words(text): return re.findall(r'\w+', text.lower())

为此:

def words(text): return text.split("\n")

现在 correction("deeplerning") 返回 'deep learning'!

如果您需要针对特定​​域的拼写校正器,此技巧将发挥很好的作用。如果这个域名很大,您可以尝试仅将最常见的一元字母/二元字母添加到您的字典中。

question也可能有所帮助。

关于python - Peter Norvig 的分词问题 : how can I segment words with misspellings inside?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45458402/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com