我在Github中找到了代码文本摘要,我将更改此程序成为Tkinter程序。我有问题什么时候会使用Button小部件在类中获取值并在Text小部件中显示结果。如何在此代码中获取方法值的总结使用Tkinter按钮?我通常只使用函数或过程没有类和方法。这个代码已经在intrepreter中运行。
import nltk
from nltk.tokenize import sent_tokenize
from nltk.tokenize import word_tokenize
from nltk.probability import FreqDist
from nltk.corpus import stopwords
class NaiveSummarizer:
def summarize(self, input, num_sentences ):
punt_list=['.',',','!','?']
summ_sentences = []
sentences = sent_tokenize(input)
lowercase_sentences =[sentence.lower()
for sentence in sentences]
#print lowercase_sentences
s=list(input)
ts=''.join([ o for o in s if not o in punt_list ]).split()
lowercase_words=[word.lower() for word in ts]
words = [word for word in lowercase_words if word not in stopwords.words()]
word_frequencies = FreqDist(words)
most_frequent_words = [pair[0] for pair in
word_frequencies.items()[:100]]
# add sentences with the most frequent words
for word in most_frequent_words:
for i in range(0, len(lowercase_sentences)):
if len(summ_sentences) < num_sentences:
if (lowercase_sentences[i] not in summ_sentences and word in lowercase_sentences[i]):
summ_sentences.append(sentences[i])
break
# reorder the selected sentences
summ_sentences.sort( lambda s1, s2: input.find(s1) - input.find(s2) )
return " ".join(summ_sentences)
if __name__ == "__main__":
naivesum = NaiveSummarizer()
text='''
To see a world in a grain of sand,
And a heaven in a wild flower,
Hold infinity in the palm of your hand,
And eternity in an hour.
A robin redbreast in a cage
Puts all heaven in a rage.
A dove-house fill'd with doves and pigeons
Shudders hell thro' all its regions.
'''
text2 = '''
You conclude with the aphorism of Hippocrates, "Qui gravi morbo correpti dolores non sentiunt, us mens aegrotat" (Those who do not perceive that they are wasted by serious illness are sick in mind), and suggest that I am in need of medicine not only to conquer my malady, but even more, to sharpen my senses for the condition of my inner self. I would fain give you an answer such as you deserve, fain reveal myself to you entirely, but I do not know how to set about it. Hardly do I know whether I am still the same person to whom your precious letter is addressed.
'''
print(naivesum.summarize(text2,3))
print(naivesum.summarize(text,2))
答案 0 :(得分:1)
您不能直接使用summarize
功能作为按钮的回调;相反,你应该将它包装到另一个调用summarize
的函数中,然后在Entry小部件中显示结果。
首先,您必须向窗口小部件添加text variable,以便您可以读取和写入文本,如下所示:
self.outputvar = StringVar()
Entry(self, textvariable=self.outputvar)
现在,您可以在按钮中添加callback
功能,例如your other question,执行此操作:
def callback(self):
text = "lorem ipsum" # get actual input text, maybe from another widget
num = 3 # get proper value for whatever this is for
result = self.summarize(text, num) # call summarize
self.outputvar.set(result) # show results in your widget
或者,您可以使用Text
小部件;在这里,inserting text的处理方式不同。