如何使用nltk从大文本语料库中提取英语单词?

时间:2017-12-11 07:45:47

标签: pandas scikit-learn nlp

我想从文本语料库中删除所有非词典英语单词。我已经删除了停用词,标记化和计数数据。我只需要提取英文单词并将它们附加回数据框。

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'))

我正在使用的文件的样本转储

https://www.dropbox.com/s/allhfdxni0kfyn6/Test.csv?dl=0

2 个答案:

答案 0 :(得分:2)

在您首次对文本语料库进行标记后,您可以阻止单词标记

import nltk
from nltk.stem.snowball import SnowballStemmer

stemmer = SnowballStemmer(language="english")

SnowballStemmer

stems = [stemmer.stem(t) for t in tokenized]  

上面,我定义了一个列表理解,执行如下:

  1. 列表理解循环遍及我们的标记化输入list 标记化
    • tokenized 也可以是任何其他可迭代的输入实例)
  2. list comprehension的操作是使用.stem实例 stemmer
  3. 对每个标记化单词执行SnowballStemmer方法
  4. list comprehension然后收集英语词干集
    • 即,它是一个应该只收集 词干英语单词标记的列表
  5.   

    警告:列表理解可以想象包括某些相同的在其他语言中的变形词,英语因为 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)