ChatGPTに、任意の文章に対して指定した単語がいくつ含まれるかをカウントして、結果を出力するPythonモジュールを書いてもらいました。
指示文(プロンプト):
以下の仕様に沿ったPythonモジュールを書いてほしいです。
仕様:
入力したテキストを形態素解析して、あらかじめ指定しておいた単語リストに含まれる単語がいくつ含まれるかをカウントする。
カウント結果は、「単語名:カウント数」というフォーマットで標準出力する。
単語リストは、別途、テキストファイルで用意しておく。テキストファイルは1行に1単語を記載したものとする。単語リストの名称は wordlist.txt としたい。
このモジュールを、別のpythonプログラムからimportで呼び出して利用できるようにしたい。
モジュールファイル名はword_counterとしたい。
回答:
以下は、指定された仕様に基づいて形態素解析を行い、単語のカウント結果を表示するPythonモジュールの例です。形態素解析にはJanomeライブラリを使用します。
# word_counter.py
from janome.tokenizer import Tokenizer
def count_words(text, wordlist_file):
# 単語リストの読み込み
with open(wordlist_file, 'r', encoding='utf-8') as f:
wordlist = [word.strip() for word in f.readlines()]
# 形態素解析器の初期化
tokenizer = Tokenizer()
# 単語のカウントを格納する辞書
word_count = {}
# テキストを形態素解析して単語をカウント
tokens = tokenizer.tokenize(text)
for token in tokens:
surface = token.surface
if surface in wordlist:
if surface in word_count:
word_count[surface] += 1
else:
word_count[surface] = 1
return word_count
次に、上記のモジュールをimportして利用する別のプログラムを作成します。
# main.py
from word_counter import count_words
# テキストの入力
text = input("テキストを入力してください: ")
# 単語リストのファイルパス
wordlist_file = "wordlist.txt"
# カウント実行
word_count = count_words(text, wordlist_file)
# カウント結果の表示
for word, count in word_count.items():
print(f"{word}:{count}")
上記の例では、word_counter.pyモジュールのcount_words関数をfrom word_counter import count_wordsとしてimportして利用しています。main.pyでは、count_words関数を使用してテキストの単語カウントを行い、結果を表示しています。
このようにすることで、main.pyからword_counter.pyモジュールをimportして利用することができます。
結果:
以下のように成功しました。
入力するテキストをファイルから読み込むようにする場合:
# word_counter.py
from janome.tokenizer import Tokenizer
def count_words_from_file(file_path, wordlist_file):
# 単語リストの読み込み
with open(wordlist_file, 'r', encoding='utf-8') as f:
wordlist = [word.strip() for word in f.readlines()]
# 形態素解析器の初期化
tokenizer = Tokenizer()
# 単語のカウントを格納する辞書
word_count = {}
# テキストファイルの読み込み
with open(file_path, 'r', encoding='utf-8') as f:
text = f.read()
# テキストを形態素解析して単語をカウント
tokens = tokenizer.tokenize(text)
for token in tokens:
surface = token.surface
if surface in wordlist:
if surface in word_count:
word_count[surface] += 1
else:
word_count[surface] = 1
return word_count
# main.py
from word_counter import count_words_from_file
# テキストファイルのパス
file_path = "kuroda_josui.txt"
# 単語リストのファイルパス
wordlist_file = "wordlist.txt"
# カウント実行
word_count = count_words_from_file(file_path, wordlist_file)
# カウント結果の表示
for word, count in word_count.items():
print(f"{word}:{count}")
結果
テキストファイルで読み込む場合も成功しました。サンプルとして吉川英治の「黒田如水」を青空文庫から拝借。