使用Python打印属于文档中最常见单词的句子

使用Python打印属于文档中最常见单词的句子,python,nlp,nltk,hashtag,Python,Nlp,Nltk,Hashtag,我有一个文本文档,我正在使用regex和nltk查找此文档中最常见的5单词。我必须把这些单词所属的句子打印出来,我该怎么做?此外,我想将此扩展到在多个文档中查找常用词并返回它们各自的句子 import nltk import collections from collections import Counter import re import string frequency = {} document_text = open('test.txt', 'r') text_string =

我有一个文本文档,我正在使用
regex
nltk
查找此文档中最常见的
5
单词。我必须把这些单词所属的句子打印出来,我该怎么做?此外,我想将此扩展到在多个文档中查找常用词并返回它们各自的句子

import nltk
import collections
from collections import Counter

import re
import string

frequency = {}
document_text = open('test.txt', 'r')
text_string = document_text.read().lower()
match_pattern = re.findall(r'\b[a-z]{3,15}\b', text_string) #return all the words with the number of characters in the range [3-15]

fdist = nltk.FreqDist(match_pattern) # creates a frequency distribution  from a list
most_common = fdist.max()    # returns a single element
top_five = fdist.most_common(5)# returns a list

list_5=[word for (word, freq) in fdist.most_common(5)]


print(top_five)
print(list_5)
输出:

[('you', 8), ('tuples', 8), ('the', 5), ('are', 5), ('pard', 5)]
['you', 'tuples', 'the', 'are', 'pard']

输出是最常见的单词,我必须打印这些单词所属的句子,我该怎么做

虽然它不像代码那样考虑单词边界处的特殊字符,但以下是一个起点:

for sentence in text_string.split('.'):
    if list(set(list_5) & set(sentence.split(' '))):
        print sentence

我们首先迭代这些句子,假设每个句子都以
结尾,并且
字符在文本中没有其他位置。然后,如果句子中的一组单词与
列表中的一组单词不为空,我们将打印句子。

如果尚未安装NLTK数据,则必须安装NLTK数据

发件人:

运行Python解释器并键入以下命令:

应打开一个新窗口,显示NLTK下载程序。点击 文件菜单,然后选择更改下载 目录

然后从“模型”选项卡安装punkt模型。 一旦你有了这些,你就可以标记所有的句子,并提取其中包含你的前5个单词的句子,如下所示:

sent_tokenize_list = nltk.sent_tokenize(text_string)    
for sentence in sent_tokenize_list:
    for word in list_5:
        if word in sentence:
            print(sentence)

我试过,如何从输出中删除这个额外的不必要的部分:输出是:;}{\levelnumbers\01;}\fi-360\li720\lin720}{\listname;}\listid1}}{*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}}\margl1440\margr1440\view14360\viewh11020\viewkind0\deftab720\pard\pardeftab720\sl512\sa520\partightinfactor0\f0\f0\fs32\cf2\cb3\expnd0\kerning0\outl0\stroke0\stroke0在我以前的刷新器中,您可以从本文顶部的系列导航链接访问它,i talkeDI是您正在加载的文本文件的输出部分?否。我的文本文件的开头如下:“在我之前的复习资料中,您可以从本文顶部的系列导航链接访问这些资料,我谈到了在Python学习过程中需要掌握的两个重要Python概念。“显示的其他输出看起来像RTF组。尝试在一个非常基本的编辑器(如Windows上的记事本)中复制文本,然后使用新的txt文件作为输入。从RTF中自动提取文本可能是另一个问题。示例中的几个字符串肯定是RTF控制字。您可以在这里验证RTF规范:如何删除其他部分,代码的输出是:;}{\levelnumbers\01;}\fi-360\li720\lin720}{\listname;}\listid1}}{*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}}\margl1440\margr1440\view14360\viewh11020\viewkind0\deftab720\f0\fs32\cf2\cb3\expnd0\cf00\kerning0\outl0\strokewidth0\strokec2在我以前的刷新中,您可以从本文顶部的系列导航链接访问这些内容,我介绍了在python学习过程中需要掌握的两个重要python概念\a0\quick note:我的文本文件如下所示:“在我之前的复习资料中,您可以从本文顶部的系列导航链接访问这些资料,我介绍了两个重要的Python概念,您需要掌握这两个概念,以便在Python学习过程中继续前进。”
sent_tokenize_list = nltk.sent_tokenize(text_string)    
for sentence in sent_tokenize_list:
    for word in list_5:
        if word in sentence:
            print(sentence)