gpt4 book ai didi

python - 从大文本文件中过滤停用词(使用包 : nltk. 语料库)

转载 作者:太空宇宙 更新时间:2023-11-03 15:33:27 28 4
gpt4 key购买 nike

我正在尝试对大型文本文件中最常用的词进行排名 - - 爱丽丝梦游仙境(公共(public)领域)。这是爱丽丝梦游仙境 DropboxPastebin .它按预期运行,有 1818 个“the”实例和 940 个“and”实例。

但现在在我最新的脚本迭代中,我试图过滤掉最常用的词,例如“and”、“there”、“the”、“that”、“to”、“a”等等。任何搜索算法都会寻找像这样的词(在 SEO 术语中称为 stop words)并将它们从查询中排除。我为此任务导入的 Python 库是 nltk.corpus .

当我生成停用词列表并调用过滤器时,“the”和“of”的所有实例都按预期过滤掉了,但它没有捕获“and”或“you”。我不清楚为什么。

我已经尝试通过手动和显式添加出现在输出中不应该出现的词来加强停用词列表。我添加了“said”、“you”、“that”等,但它们仍然出现在文本文件中最常用的前 10 个词中。

这是我的脚本:

from collections import Counter
from nltk.corpus import stopwords
import re

def open_file():
with open('Alice.txt') as f:
text = f.read().lower()
return text

def main(text):
stoplist = stopwords.words('english') # Bring in the default English NLTK stop words
stoplist.extend(["said", "i", "it", "you", "and","that",])
# print(stoplist)
clean = [word for word in text.split() if word not in stoplist]
clean_text = ' '.join(clean)
words = re.findall('\w+', clean_text)
top_10 = Counter(words).most_common(10)
for word,count in top_10:
print(f'{word!r:<4} {"-->":^4} {count:>4}')

if __name__ == "__main__":
text = open_file()
main(text)

这是我的实际输出:

$ python script8.py

'alice' --> 403

'i' --> 283

'it' --> 205

's' --> 184

'little' --> 128

'you' --> 115

'and' --> 107

'one' --> 106

'gutenberg' --> 93

'that' --> 92

我期望的是“我”、“它”和“你”的所有实例都被排除在这个列表之外,但它们仍然出现,我不清楚为什么。

最佳答案

您的代码执行此操作:

  1. 首先,您使用 text.split() 在空白处拆分文本。但是生成的“单词”列表仍然包含标点符号,例如 as,head!''i(请注意 ' 用作引号和撇号)。

  2. 然后您排除所有在 stopwords 中匹配的“词”。这将排除 i 但不排除 'i

  3. 接下来您使用空格重新连接所有剩余的单词。

  4. 然后您使用 '\w+' 正则表达式搜索字母序列(不包括标点符号):因此 'i 将匹配为 。这就是 is 出现在前 10 名中的原因。

有几种方法可以解决这个问题。例如,您可以使用 re.split() 来拆分不仅仅是空格:

def main(text):
stoplist = stopwords.words('english')
stoplist.extend(["said"]) # stoplist already includes "i", "it", "you"
clean = [word for word in re.split(r"\W+", text) if word not in stoplist]
top_10 = Counter(clean).most_common(10)
for word,count in top_10:
print(f'{word!r:<4} {"-->":^4} {count:>4}')

输出:

'alice' -->   403
'little' --> 128
'one' --> 106
'gutenberg' --> 93
'know' --> 88
'project' --> 87
'like' --> 85
'would' --> 83
'went' --> 83
'could' --> 78

请注意,这是分别处理带连字符的短语:so gutenberg-tm -> gutenberg, tm。为了更好地控制这个,你可以关注Jay's。建议看看nltk.tokenize .例如,nltk 分词器知道收缩,所以 don't -> do + n't

您还可以通过从文本中删除古腾堡许可条件来改进内容:)

关于python - 从大文本文件中过滤停用词(使用包 : nltk. 语料库),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56436291/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com