使用Python / NLTK提取一组单词,然后将其与标准英语词典进行比较

前端之家收集整理的这篇文章主要介绍了使用Python / NLTK提取一组单词,然后将其与标准英语词典进行比较前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有:

from __future__ import division
import nltk,re,pprint
f = open('/home/a/Desktop/Projects/FinnegansWake/JamesJoyce-FinnegansWake.txt')
raw = f.read()
tokens = nltk.wordpunct_tokenize(raw)
text = nltk.Text(tokens)
words = [w.lower() for w in text]

f2 = open('/home/a/Desktop/Projects/FinnegansWake/catted-several-long-Russian-novels-and-the-NYT.txt')
englishraw = f2.read()
englishtokens = nltk.wordpunct_tokenize(englishraw)
englishtext = nltk.Text(englishtokens)
englishwords = [w.lower() for w in englishwords]

这是直接来自NLTK手册.我接下来要做的是将词汇与一套详尽的英语单词(如OED)进行比较,然后提取差异 – 一组没有,也可能永远不会出现在OED中的Finnegans唤醒词.我更像是一个口头的人,而不是一个数学导向的人,所以我还没有想出如何做到这一点,并且手册对于我实际上不想做的事情进行了太多细节.不过,我假设它只是一两行代码.

最佳答案
如果你的英语词典确实是一套(希望是小写的话),

set(vocab) - english_dictionary

为您提供词汇集中的单词集,但不包含在english_dictionary单词中. (遗憾的是,你将vocab变成了一个排序的列表,因为你需要把它变成一个集合来执行这样的操作,例如这个集合差异!).

如果您的英语词典采用不同的格式,而不是真正的一套或只包含小写词,您必须告诉我们这种格式对我们来说能够提供帮助! – )

编辑:鉴于OP的编辑显示两个单词(以前称为vocab)和英语单词(我以前称之为english_dictionary)实际上是小写单词的列表,然后

newwords = set(words) - set(englishwords)

要么

newwords = set(words).difference(englishwords)

有两种表达“不是英语词汇的词汇”的方法.前者稍微简洁一点,后者可能更具可读性(因为它明确地使用“差异”一词而不是减号)并且可能更有效(因为它没有明确地将列表英语词汇转换为但是,如果速度至关重要,则需要通过测量来检查,因为“内部”差异仍然需要进行某种“转换到设置”的操作.

如果你渴望有一个列表作为结果而不是一个集合,排序(新词)将给你一个按字母顺序排序的列表(列表(新词)会给你一个更快的列表,但完全是任意顺序,我怀疑你宁愿等待一小段额外的时间,并得到一个很好的按字母顺序排列的结果;-).

原文链接:https://www.f2er.com/python/439054.html

猜你在找的Python相关文章