Python - 是否有英语GB词的NLTK语料库?

问题描述 投票:0回答:1

我正在学习Python,并试图在flask中创建一个字谜创作器。

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

我的问题是它只使用美式英语,所以在下面的例子中,'favro'变成了'favor',这是美式拼写,但'favrou'没有变成'favor',这是英式拼写。

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))

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

我试过使用'enchant',在解题器部分运行良好,但当我试图在一个单词中创建一个单词列表时,速度慢得令人难以置信。例如,当我试图找到'颜色'内的所有单词时,ltk需要0.08秒,而enchant需要2.5秒。随着字母数量的增加,这个时间差也会增加,所以enchant是不可行的。

有什么好办法吗?

史蒂夫

python nltk
1个回答
0
投票

如果你只用NLTK来处理单词语料库,你可能只想找一个英式英语单词的单词表,然后把它读进去。

既然我们在讨论字谜,为什么不使用SOWPODS单词表,就像在官方拼字比赛中使用的那样?

例如: https:/raw.githubusercontent.comjesstessScrabblemasterscrabblesowpods.txt。 (警告:大文件!)包含 FAVOUR,所以它应该为你工作。

EDIT: 详述我的评论,例如:

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)) 作为dict.的键)

© www.soinside.com 2019 - 2024. All rights reserved.