【问题标题】:Python - Is there an NLTK Corpus for english GB words?Python - 是否有用于英语 GB 单词的 NLTK 语料库?
【发布时间】:2020-08-05 08:12:32
【问题描述】:

我正在学习 Python 并尝试在烧瓶中创建一个字谜创建器/求解器。

我正在使用 nltk 并设置了一个基本脚本,它可以解扰一组字母并从语料库中找到单词。我知道我的方法可能并不完美 - 请记住,我仍在学习 Python 中可用的功能 - 但它原则上是有效的,我创建了一个类似的脚本来查找一组字母中的所有单词。

我的问题是它只使用美式英语,所以在下面的示例中,“favro”变成了“favor”,即美式拼写,但“favrou”并没有变成“favour”,即英式拼写。

import itertools
import nltk
from nltk.corpus import words
english_vocab = set(w.lower() for w in nltk.corpus.words.words())
scramble = "favro"
sep = ""
for y in list(itertools.permutations(scramble, len(scramble))):
    if (sep.join(y) in english_vocab):
        print(sep.join(y))

有什么东西可以区分美式英语和英式英语吗?

我尝试使用“附魔”,它在求解器部分工作得很好,但是当我尝试在一个单词中创建一个单词列表时,它非常慢。例如,当我尝试查找“颜色”中的所有单词时,nltk 需要 0.08 秒,而附魔需要 2.5 秒。这个时间差随着字母数量的增加而增加,所以附魔是不可行的。

有什么想法吗?

史蒂夫

【问题讨论】:

    标签: python nltk


    【解决方案1】:

    如果您只是将 NLTK 用于单词语料库,您可能只想找到一个英英单词的单词列表并读入。

    既然我们谈论的是字谜求解器,为什么不使用官方拼字游戏比赛中使用的 SOWPODS 单词列表?

    例如,https://raw.githubusercontent.com/jesstess/Scrabble/master/scrabble/sowpods.txt(警告:大文件!)包含FAVOUR,所以它应该适合你。

    编辑:详细说明我的评论,例如

    from collections import defaultdict
    
    ws = defaultdict(set)
    
    for word in open("./sowpods.txt"):
        word = word.lower().strip()
        if word:
            ws[frozenset(word)].add(word)
    
    
    def find(word):
        return ws[frozenset(word)]
    
    
    print(find("wired"))
    

    输出

    {'rewired', 'weirdie', 'wiredrew', 'dewier', 'weired', 'widder', 'wried', 'weird', 'weirded', 'weedier', 'wider', 'wired', 'weirder'}
    

    在 0.7 秒内。

    (是的,这是可能单词的超集,但很容易过滤掉。另一个可以避免这种情况的选择是使用 ''.join(sorted(word)) 作为字典的键。)

    【讨论】:

    • 谢谢@akx,文件导入可能是我要走的路线。我创建了一个脚本来拆分一个大文件,例如您提到的基于字长的较小文件,这将加快主脚本的速度。
    • @SteveH 您不一定需要将大文件拆分为较小的文件...您可以将其读入以frozenset(word) 为键的字典,其值是一组完整的单词。这样查找字谜就像通过frozenset(word) 查找一样简单 :)
    • 我决定走一条不同的路,想出了这个github.com/StephenH69/Python-Word-Solvers。更快,现在更适合在网站上使用。感谢您的帮助。
    • 您可以通过不打开和关闭每个单词的文件来将 splitwordlist 的速度提高 50 倍。另外,使用\n 作为分隔符,而不是\r :)
    猜你喜欢
    • 1970-01-01
    • 2019-07-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-21
    • 2015-05-19
    • 2018-05-24
    • 1970-01-01
    • 2016-06-19
    相关资源
    最近更新 更多