我想从文本语料库中删除所有非词典英语单词。我已经删除了停用词,标记化和计数数据。我只需要提取英文单词并将它们附加回数据框。
data['Clean_addr'] = data['Adj_Addr'].apply(lambda x: ' '.join([item.lower() for item in x.split()]))
data['Clean_addr']=data['Clean_addr'].apply(lambda x:"".join([item.lower() for item in x if not item.isdigit()]))
data['Clean_addr']=data['Clean_addr'].apply(lambda x:"".join([item.lower() for item in x if item not in string.punctuation]))
data['Clean_addr'] = data['Clean_addr'].apply(lambda x: ' '.join([item.lower() for item in x.split() if item not in (new_stop_words)]))
cv = CountVectorizer( max_features = 200,analyzer='word')
cv_addr = cv.fit_transform(data.pop('Clean_addr'))
我正在使用的文件的样本转储
答案 0 :(得分:2)
在您首次对文本语料库进行标记后,您可以阻止单词标记
import nltk
from nltk.stem.snowball import SnowballStemmer
stemmer = SnowballStemmer(language="english")
stem.snowball.EnglishStemmer
porter
词干分析器的better than)
stems = [stemmer.stem(t) for t in tokenized]
上面,我定义了一个列表理解,执行如下:
list
标记化
.stem
实例 stemmer SnowballStemmer
方法
警告:列表理解可以想象包括某些相同的在其他语言中的变形词,英语因为 porter2 会误认为是英语单词
答案 1 :(得分:0)
我有非常相似的需求。您的问题出现在我的搜索中。感觉到我需要进一步研究,发现THIS。我针对我的特定需求做了一些修改(仅技术数据表中的TONS的英文单词=没有数字或测试标准,值或单位等)。经过其他方法的痛苦之后,下面的方法起作用了。我希望它可以成为您和其他人的一个很好的出发点。
import nltk
from nltk.corpus import stopwords
words = set(nltk.corpus.words.words())
stop_words = stopwords.words('english')
file_name = 'Full path to your file'
with open(file_name, 'r') as f:
text = f.read()
text = text.replace('\n', ' ')
new_text = " ".join(w for w in nltk.wordpunct_tokenize(text)
if w.lower() in words
and w.lower() not in stop_words
and len(w.lower()) > 1)
print(new_text)