我有一个数据集,由两个列组成,一个是Myers-Briggs的人格类型,另一个是那个人的最后50条推特。我已经标记了,从列表中删除了URL和停止词,并对单词进行了归纳。
然后,我创建了一个最常见的单词的collections.Counter,我正在检查它们是否是nltk的有效英语单词。
问题是,检查这个词是否存在于语料库中需要花费太多的时间,而且我也认为这个词汇表中有很多单词被遗漏了。这是我的密码:
import nltk
import collections
from nltk.corpus import words
# nltk.download("words")
# Creating a frequency Counter of all the words
frequency_counter = collections.Counter(df.posts.explode())
sorted_common_words = sorted(frequency_counter.items(), key = lambda pair: -pair[1])
words_lst = []
for i in range(len(sorted_common_words)):
if sorted_common_words[i][1] > 1000:
words_lst.append(sorted_common_words[i][0])
valid_words = []
invalid_words = []
valid_words = [word for word in words_lst if word in words.words()]
invalid_words = [word for word in words_lst if word not in words.words()]我的问题是,invalid_words列表包含了一些有效的英语单词,如:

当然还有更多。即使手动检查words.words()中是否存在这些单词,也会返回False。我最初试图阻止我的文字,但这产生了一些词根,这看上去不对,这就是为什么我决定把它们混淆起来。
Python中是否有一个库,它包含所有英文单词的词干版本?我想这会大大加快我的剧本速度。
我最初的数据格式大约是9000行,清理数据集后,大约有超过500万个标记字和大约110.000个独特的单词。‘words.words()is containing 236736 words, so checking if those 110.000 words are withinwords.words()’将花费太多的时间。我检查了1000次,检查大约需要一分钟。这主要是因为Python只能在一个内核上运行,所以不能在所有可用的内核上并行操作。
发布于 2020-11-16 22:54:34
我建议这样的解决办法:
# your code as it was before
words_lst = []
for i in range(len(sorted_common_words)):
if sorted_common_words[i][1] > 1000:
words_lst.append(sorted_common_words[i][0])
import numpy as np
words_arr = np.array(words_lst,dtype=str)
words_dictionary = np.array(words.words(),dtype=str)
mask_valid_words = np.in1d(words_arr, words_dictionary)
valid_words = words_arr[mask_valid_words]
invalid_words = words_arr[~mask_valid_words]https://stackoverflow.com/questions/64866522
复制相似问题