我試圖撰寫一個從隨機文本檔案中選擇單詞的單詞計數器程式。條件是重復 5 次或更多次的單詞將被寫在螢屏上。我嘗試了很多例子。我嘗試了帶有 if 條件的 count() 函式,如下所示:
如果 fullText.count(word) > 5:...
但它不起作用。
這是我的代碼:
from tkinter import *
from tkinter import filedialog
main = Tk()
main.title(".TXT File Word Counter")
main.resizable(height=FALSE, width=FALSE)
main.geometry('500x400')
main.configure(bg='#757575')
labelfont = ("Arial", 14, "bold")
result = dict()
def clear_text():
textfield.delete(0, END)
ShowCountedWords.delete(1.0, END)
def open_file():
main.filename = filedialog.askopenfilename()
def count_word(file):
fileOpen = open(str(file), 'r')
fullText = fileOpen.readlines()
fileOpen.close()
for word in textfield.get().split(', '):
for text in fullText:
if word in result:
result[word] = result[word] text.count(word)
else:
result[word] = text.count(word)
ShowCountedWords.delete(1.0, END)
for key, value in result.items():
ShowCountedWords.insert('1.0', '{0} : {1} \n'.format(key, value))
result.clear()
heading = Label(main, text=".TXT File Word Counter")
heading.place(x=150, y=2)
heading.config(bg="#757575", font=labelfont, fg="#ffffff")
textfield = Entry()
textfield.place(x=3, y=30)
textfield.config(width=81, borderwidth=2)
btnSelectFile = Button(main, text="Select .txt File", command=lambda : open_file())
btnSelectFile.place(x=4, y=60)
btnSelectFile.config(width=20, bg="#66BB6A")
btnCount = Button(main, text="Count Words", command=lambda : count_word(main.filename))
btnCount.place(x=173, y=60)
btnCount.config(width=20, bg="#42A5F5")
btnClear = Button(main, text="Clear", command=lambda : clear_text())
btnClear.place(x=344, y=60)
btnClear.config(width=20, bg="#ef5350")
ShowCountedWords = Text(main, height=18, width=61)
ShowCountedWords.place(x=4, y=100)
ShowCountedWords.config(bg="#616161", fg="#ffffff")
main.mainloop()
我該怎么辦?(tkinter 在這個問題上并不重要。)
uj5u.com熱心網友回復:
您可以使用re模塊查找字串中的所有單詞,然后用于collections.Counter()計算單詞的出現次數。
下面是一個例子:
import re
from collections import Counter
with open('sample.txt') as f:
data = f.read()
# found all words
words = re.findall(r'[\w] ', data)
# count occurrence of words
result = Counter(words)
# show all words with occurrence >= 5
print([word for word, count in result.items() if count >= 5])
uj5u.com熱心網友回復:
fullText.replace(",","")
fullText.replace(".","")
for word in textfield.get().split(' '):
#your code
如果你用“,”分割字串,大多數單詞將被跳過
uj5u.com熱心網友回復:
在“for text in fullText”回圈中,您正在遍歷打開的檔案中的行串列,而不是要添加到字典中的單詞串列。您的邏輯是正確的,遍歷串列,找到一個單詞,如果它已經存在于字典中,則為其添加一個計數,如果不存在,則使其成為 count = 1 的新實體。但是,您需要將每一行從將行串列轉換為單詞的子串列,這些是您要迭代的單詞。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/408132.html
標籤:
