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

2024-10-01 15:29:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有:

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手册。接下来我要做的是将vocab与一组详尽无遗的英语单词(如《牛津英语词典》)进行比较,并找出其中的区别——这组芬尼根唤醒词,它们没有,也可能永远不会出现在《牛津英语词典》中。我更像是一个口头的人,而不是一个注重数学的人,所以我还没有想出如何做到这一点,而且手册对我实际上不想做的事情做了太多的细节。不过,我假设这只是一两行代码。在


Tags: textimporttxthomereadrawopenprojects
1条回答
网友
1楼 · 发布于 2024-10-01 15:29:41

如果你的英语字典真的是一套(希望是小写单词)

set(vocab) - english_dictionary

给您一组单词,它们在vocab集中,但不在{}集中。(遗憾的是,您通过sortedvocab转换为一个列表,因为您需要将其转换回一个集合来执行诸如这个集合差异之类的操作!)。在

如果你的英文字典是不同的格式,不是真的是一套或不是由小写单词组成,你必须告诉我们是什么格式,我们才能帮助!-)在

编辑:假设OP的编辑显示words(以前称为vocab)和{}(我之前称之为{})实际上都是小写单词的列表,那么

^{pr2}$

或者

newwords = set(words).difference(englishwords)

是两种表达“非英语单词的词集”的方法。前者略为简洁,后者可能更具可读性(因为它显式地使用了单词“difference”,而不是减号),并且可能效率更高(因为它没有显式地将列表englishwords转换为一个集合,如果速度至关重要,则需要通过测量来检查,因为“内部”difference仍然需要执行某种类似“转换到集合”的操作)。在

如果你希望得到一个列表而不是一个集合,sorted(newwords)会给你一个按字母顺序排序的列表(list(newwords)会给你一个更快的列表,但是以完全任意的顺序,我想你宁愿多等一点时间,然后得到一个按字母顺序排列的结果;-)。在

相关问题 更多 >

    热门问题