无法避免在令牌列表中停止单词

时间:2016-01-05 21:27:50

标签: python-3.x nltk

我正在对来自wiki的文本进行规范化,如果任务是从文本标记中删除停用词(item),则对其进行规范化。但我不能这样做,更确切地说,我无法避免一些项目。

代码:

# coding: utf8
import os

from nltk import corpus, word_tokenize, FreqDist, ConditionalFreqDist
import win_unicode_console

win_unicode_console.enable()

stop_words_plus = ['il', 'la']
text_tags = ['doc', 'https', 'br', 'clear', 'all']
it_sw = corpus.stopwords.words('italian') + text_tags + stop_words_plus
it_path = os.listdir('C:\\Users\\1\\projects\\i')
lom_path = 'C:\\Users\\1\\projects\\l'
it_corpora = []
lom_corpora = []

def normalize(raw_text):
    tokens = word_tokenize(raw_text)
    norm_tokens = []
    for token in tokens:
        if token not in it_sw and token.isalpha() and len(token) > 1:
            token = token.lower()
            norm_tokens.append(token)
    return norm_tokens

for folder_name in it_path:
    path_to_files = 'C:\\Users\\1\\projects\\i\\%s' % (folder_name)
    files_list = os.listdir(path_to_files)
    for file_name in files_list:
        file_path = path_to_files + '\\' + file_name
        text_file = open(file_path, encoding='utf8')
        raw_text = text_file.read()
        norm_tokens = normalize(raw_text)
        it_corpora += norm_tokens

print(FreqDist(it_corpora).most_common(10))

输出:

[('anni', 1140), ('il', 657), ('la', 523), ('gli', 287), ('parte', 276), ('stato', 276), ('due', 269), ('citta', 254), (
'nel', 248), ('decennio', 242)]

正如你所看到的,我需要避免单词'il''la',我将它们添加到列表(it_sw)中,然后它们就是(我'已检查)。然后我在func规范化我尝试避免它们`如果令牌不在it_sw中,但它不起作用,我不知道什么是错的。

1 个答案:

答案 0 :(得分:0)

在发现它不在it_sw之后,您将令牌转换为小写。您的某些令牌是否可能包含大写字符?在这种情况下,您可以稍微调整for循环:

for token in tokens:
    token = token.lower()
    if token not in it_sw and token.isalpha() and len(token) > 1:
        norm_tokens.append(token)

顺便说一下,我不确定你的代码的性能是否重要,但是如果它是你通过检查一个集合而不是列表中存在令牌可能会获得更好的性能,只需更改你的it_sw的定义为:

it_sw = set(corpus.stopwords.words('italian') + text_tags + stop_words_plus)

您也可以将it_corpora更改为一个集合,但这需要进行一些小的更改。