🐈

【python】複数HTMLファイル内の頻出ワードをカウントする

2024/05/26に公開

用意した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)


https://mieruca-ai.com/ai/nlp-stopwords/

Discussion