以下的文章和程式都是用ChatGPT產生,本篇文章主要是探討字詞統計程式。
本篇程式是統計單字出現次數,並且可以處理多次輸入,具有廣泛的應用場景。以下是幾個常見的應用領域:
文字分析與自然語言處理 (NLP)
- 詞頻分析 (Word Frequency Analysis): 用於分析文本中單字的出現次數,挖掘出重要的關鍵字或熱門話題。
- 情感分析 (Sentiment Analysis): 藉由詞頻統計,了解使用者的情緒傾向,例如正面或負面的用詞。
- 生成詞雲 (Word Cloud): 統計詞頻後用來生成詞雲,作為可視化展示工具。
2. 學術與教育
- 閱讀理解測驗: 統計學生在文章中使用或理解的單字,幫助教師評估學生的詞彙能力。
- 語言學研究: 用於語料庫中詞頻的分析,協助研究某一語言的使用特性。
- 作文輔助: 幫助學生或作家了解某篇文章中重複使用的詞,改善文字表達。
3. 企業與市場研究
- 客戶回饋分析: 分析客戶評論中的詞頻,快速找出客戶最常提到的關鍵點(如問題或優點)。
- 社群媒體監控: 統計用戶在社群媒體上提到某品牌或主題的頻率,追蹤流行趨勢。
- SEO 優化: 統計網站文章中的關鍵字,優化搜尋引擎排名。
4. 數據處理與監控
- 日誌分析 (Log Analysis): 分析伺服器或應用程式日誌中的關鍵字,排查錯誤或監控異常活動。
- 大數據預處理: 將海量文本資料切割、分類,統計詞頻,作為機器學習的特徵輸入。
5. 遊戲與娛樂
- 文字遊戲: 用於開發文字相關的遊戲,例如文字拼圖或詞頻挑戰遊戲。
- 劇本分析: 統計劇本中角色的對話詞頻,分析角色的重要性或語言風格。
6. 法律與媒體
- 法律文件分析: 統計法律文本中關鍵術語的頻率,用於案件的準備或合同分析。
- 新聞文章分析: 分析新聞文本中的詞頻,判斷媒體報導的重點和角度。
總結:
這樣的程式對任何涉及文字數據處理或分析的場合都非常實用,尤其適合需要快速統計並提取信息的場景。
範例一、一個簡單的 Python 程式,可以從終端機讀取使用者輸入的字串並將其顯示
1 2 3 4 5 6 7 8 9 10 | # 從終端機讀取字串並輸出 def main(): # 提示使用者輸入 user_input = input("請輸入一段文字:") # 輸出使用者輸入的文字 print(f"您輸入的文字是:{user_input}") if __name__ == "__main__": main() |
執行結果:
請輸入一段文字:今天天氣很好
您輸入的文字是:今天天氣很好
範例二、從終端機讀取一段文字,將其切割成單字,並輸出結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # 從終端機讀取字串並切割成單字 def main(): # 提示使用者輸入 user_input = input("請輸入一段文字:") # 切割文字為單字(以空白為分隔符) words = user_input.split() # 輸出切割結果 print("切割後的單字為:") for word in words: print(word) if __name__ == "__main__": main() |
ChatGPT給出的測試句字和執行結果:
執行結果:
請輸入一段文字:今天天氣很好,我想去散步。
切割後的單字為:
今天天氣很好,我想去散步。
改輸入英文,執行結果:
請輸入一段文字:The weather is nice today and I want to go for a walk.
切割後的單字為:
The
weather
is
nice
today
and
I
want
to
go
for
a
walk.
範例三、讀取一段文字,切割成單字,並使用映射將每個單字及其出現次數存入字典
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # 從終端機讀取字串,切割成單字,並計算每個單字的出現次數 def main(): # 提示使用者輸入 user_input = input("請輸入一段文字:") # 切割文字為單字(以空白為分隔符) words = user_input.split() # 使用字典計算單字出現次數 word_count = {} for word in words: word_count[word] = word_count.get(word, 0) + 1 # 如果單字不存在,預設為 0 # 輸出結果 print("單字出現次數:") for word, count in word_count.items(): print(f"{word}: {count}") if __name__ == "__main__": main() |
請輸入一段文字:The weather is very good today. I went for a walk today. I had a great time walking.
單字出現次數:
The: 1
weather: 1
is: 1
very: 1
good: 1
today.: 2
I: 2
went: 1
for: 1
a: 2
walk: 1
had: 1
great: 1
time: 1
walking.: 1
歸約(Reduce)可以將資料進一步簡化或統合,例如計算單字總數。以下是整合 Map 和 Reduce 的程式範例,使用 Python 的 functools.reduce 進行歸約。
範例四、計算所有單字的總出現次數
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | from functools import reduce # 從終端機讀取字串,切割成單字,計算單字出現次數並進行歸約 def main(): # 提示使用者輸入 user_input = input("請輸入一段文字:") # 切割文字為單字(以空白為分隔符) words = user_input.split() # 使用字典計算單字出現次數 word_count = {} for word in words: word_count[word] = word_count.get(word, 0) + 1 # 如果單字不存在,預設為 0 # 使用 Reduce 計算單字的總出現次數 total_count = reduce(lambda acc, count: acc + count, word_count.values(), 0) # 輸出結果 print("單字出現次數:") for word, count in word_count.items(): print(f"{word}: {count}") print(f"單字總出現次數:{total_count}") if __name__ == "__main__": main() |
執行結果:
請輸入一段文字:The weather is very good today. I went for a walk today. I had a great time walking.
單字出現次數:
The: 1
weather: 1
is: 1
very: 1
good: 1
today.: 2
I: 2
went: 1
for: 1
a: 2
walk: 1
had: 1
great: 1
time: 1
walking.: 1
單字總出現次數:18
以下是一個完整的程式,允許使用者重複輸入文字,直到輸入空字串為止。程式會將輸入的文字切割成單字,計算每個單字的出現次數,並在結束時輸出結果:
範例五、完整的程式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | from functools import reduce def main(): print("請開始輸入文字(輸入空字串以結束):") # 用來存儲所有輸入的文字 all_words = [] while True: user_input = input("> ") if user_input.strip() == "": # 空字串結束條件 break # 切割並加入總單字列表 words = user_input.split() all_words.extend(words) # 使用字典計算單字出現次數 word_count = {} for word in all_words: word_count[word] = word_count.get(word, 0) + 1 # 累加單字次數 # 使用 Reduce 計算單字的總出現次數 total_count = reduce(lambda acc, count: acc + count, word_count.values(), 0) # 輸出結果 print("\n單字出現次數統計:") for word, count in word_count.items(): print(f"{word}: {count}") print(f"\n單字總出現次數:{total_count}") if __name__ == "__main__": main() |
請開始輸入文字(輸入空字串以結束):
> The weather is very good today.
> I went for a walk today.
> I had a great time walking.
>
單字出現次數統計:
The: 1
weather: 1
is: 1
very: 1
good: 1
today.: 2
I: 2
went: 1
for: 1
a: 2
walk: 1
had: 1
great: 1
time: 1
walking.: 1
單字總出現次數:18
上述程式使用的是基於空白分隔的 split()
方法來分割文字,這在處理英文或其他以空白分隔單詞的語言時非常有效。然而,中文並沒有空白來分隔單詞,因此需要使用專門的中文斷詞工具。
改進方法:使用中文斷詞工具
在 Python 中,jieba
是一個強大的中文斷詞庫,可以有效地將中文句子分割成單詞(或詞語)。
以下是針對中文的改良版程式:
範例六、中文字詞統計
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | import jieba from functools import reduce def main(): print("請開始輸入文字(輸入空字串以結束):") # 用來存儲所有輸入的詞語 all_words = [] while True: user_input = input("> ") if user_input.strip() == "": # 空字串結束條件 break # 使用 jieba 將輸入的中文文字斷詞 words = jieba.lcut(user_input) # lcut 返回列表 all_words.extend(words) # 使用字典計算單詞出現次數 word_count = {} for word in all_words: word_count[word] = word_count.get(word, 0) + 1 # 累加單詞次數 # 使用 Reduce 計算單詞的總出現次數 total_count = reduce(lambda acc, count: acc + count, word_count.values(), 0) # 輸出結果 print("\n單字或詞語出現次數統計:") for word, count in word_count.items(): print(f"{word}: {count}") print(f"\n總詞語數量:{total_count}") if __name__ == "__main__": main() |
執行結果:
請開始輸入文字(輸入空字串以結束):
> 今天天氣很好
Building prefix dict from the default dictionary ...
Dumping model to file cache C:\Users\CHENG-~1\AppData\Local\Temp\jieba.cache
Loading model cost 0.526 seconds.
Prefix dict has been built successfully.
> 今天去散步
> 散步讓人開心
>
單字或詞語出現次數統計:
今天: 2
天氣: 1
很: 1
好: 1
去: 1
散步: 2
讓: 1
人: 1
開心: 1
總詞語數量:11
沒有留言:
張貼留言