🐈
【python】複数HTMLファイル内の頻出ワードをカウントする
用意したhtmlは以下の通り
file1.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Sample HTML</title>
</head>
<body>
<h1>学校に行くのは毎日楽しいです。学校ではたくさんのことを学びます。友達と一緒に勉強するのが好きです。</h1>
</body>
</html>
file2.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Sample HTML</title>
</head>
<body>
<h1>学校ではたくさんのことを学びます。友達と一緒に勉強します。</h1>
</body>
</html>
file3.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Sample HTML</title>
</head>
<body>
<h1>毎日学校に行くのは楽しいです。先生も優しいです。</h1>
</body>
</html>
BeautifulSoupをインストール
pip install beautifulsoup4
複数HTMLファイル内の頻出ワードをカウントする
import os
from collections import Counter
from janome.tokenizer import Tokenizer
import stopwordsiso as stopwords
import csv
from bs4 import BeautifulSoup
# 日本語のストップワードを取得
japanese_stop_words = set(stopwords.stopwords('ja'))
# 指定するディレクトリ
directory = 'path' # HTMLファイルが格納されているディレクトリを指定
# 指定されたディレクトリ内のすべてのHTMLファイルを読み込み
def read_html_files(directory):
text_data = []
for filename in os.listdir(directory):
if filename.endswith('.html'):
with open(os.path.join(directory, filename), 'r', encoding='utf-8') as file:
html_content = file.read()
soup = BeautifulSoup(html_content, 'html.parser')
text = soup.get_text()
text_data.append(text)
return text_data
# テキストデータから頻出ワードをカウントする関数
def count_frequent_words(text_data, stop_words):
tokenizer = Tokenizer()
word_count = Counter()
for text in text_data:
words = tokenizer.tokenize(text, wakati=True)
filtered_words = [word for word in words if word not in stop_words and len(word) >= 2 and word.isalpha()]
word_count.update(filtered_words)
return word_count
# HTMLファイルのテキストデータの読み込み
html_text_data = read_html_files(directory)
# 頻出ワードをカウント
word_count = count_frequent_words(html_text_data, japanese_stop_words)
# 上位10件の頻出ワードを表示
print("Top 10 most frequent words:")
for word, count in word_count.most_common(10):
print(f"{word}: {count}")
# 全頻出ワードのカウントをCSVファイルに保存
output_path = "path" # CSVファイルを保存するディレクトリを指定
with open(output_path, "w", encoding="utf-8", newline="") as f:
writer = csv.writer(f)
writer.writerow(["Word", "Frequency"])
for word, count in word_count.items():
writer.writerow([word, count])
print(f"Word frequency data has been exported to {output_path}")
実行結果
word_frequency.csv
参考:日本語のストップワードを取得
from stopwordsiso import stopwords
# 日本語のストップワードを取得
japanese_stop_words = stopwords('ja')
print(japanese_stop_words)
Discussion