我有:
@H_403_5@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唤醒词.我更像是一个口头的人,而不是一个数学导向的人,所以我还没有想出如何做到这一点,并且手册对于我实际上不想做的事情进行了太多细节.不过,我假设它只是一两行代码.
最佳答案
如果你的英语词典确实是一套(希望是小写的话),
@H_403_5@
set(vocab) - english_dictionary
为您提供词汇集中的单词集,但不包含在english_dictionary单词中. (遗憾的是,你将vocab变成了一个排序的列表,因为你需要把它变成一个集合来执行这样的操作,例如这个集合差异!).
如果您的英语词典采用不同的格式,而不是真正的一套或只包含小写词,您必须告诉我们这种格式对我们来说能够提供帮助! – )
编辑:鉴于OP的编辑显示两个单词(以前称为vocab)和英语单词(我以前称之为english_dictionary)实际上是小写单词的列表,然后
@H_403_5@newwords = set(words) - set(englishwords)
要么
@H_403_5@newwords = set(words).difference(englishwords)
有两种表达“不是英语词汇的词汇”的方法.前者稍微简洁一点,后者可能更具可读性(因为它明确地使用“差异”一词而不是减号)并且可能更有效(因为它没有明确地将列表英语词汇转换为但是,如果速度至关重要,则需要通过测量来检查,因为“内部”差异仍然需要进行某种“转换到设置”的操作.
如果你渴望有一个列表作为结果而不是一个集合,排序(新词)将给你一个按字母顺序排序的列表(列表(新词)会给你一个更快的列表,但完全是任意顺序,我怀疑你宁愿等待一小段额外的时间,并得到一个很好的按字母顺序排列的结果;-).