Alice in Wonderland における 文章の長さ.


先日からAlice in Wonderland の分析を行なっている.

今回は小説内の文章の長さの基本統計量を調査してみた.

結果としては下記であった.

count 1627.000000

mean 16.213276

std 16.399288

min 1.000000

25% 5.000000

50% 11.000000

75% 22.000000

max 179.000000

平均的に16.2単語で1文は構成され,標準偏差が16.3あった.これは外れ値の影響も大きいように思われる.

以下に実行したコードと結果を示す.

import re
import pandas as pd

# 全角を半角に変換する関数
def fullwidth_to_halfwidth(full_text):
    return full_text.translate(str.maketrans(
        'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
        'Abcdefghijklmnopqrstuvwxyz'
        '0123456789'
        ',.!?:;”“’‘()[]{}〈〉《》「」『』【】+-='
        '¥%#@&*',
        'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
        'abcdefghijklmnopqrstuvwxyz'
        '0123456789'
        ',.!?:;""\'\'()[]{}<>《》「」『』【】+-='
        '¥%#@&*'
    ))

# テキストを前処理する関数
def preprocess_text(text):
    text = fullwidth_to_halfwidth(text)  # 全角を半角に変換
    text = text.lower()  # 小文字に変換
    text = re.sub(r'[\r\n\t]', ' ', text)  # 改行、タブをスペースに置換
    text = re.sub(r'[^a-zA-Z0-9\s,.!?]', '', text)  # 英数字と基本的な句読点以外を削除
    text = re.sub(r'\\', '', text)  # バックスラッシュを削除
    text = re.sub(r'\s+', ' ', text).strip()  # 複数のスペースを一つにまとめる
    return text

# テキストを文単位に切り分ける関数
def split_into_sentences(text):
    # 文の区切りを正規表現で指定
    sentence_endings = re.compile(r'(?<!\w\.\w.)(?<![A-Z][a-z]\.)(?<=\.|\?|!)\s')
    sentences = sentence_endings.split(text)
    return [sentence.strip() for sentence in sentences if sentence]

# 文章の単語数をカウントする関数
def count_words_in_sentence(sentence):
    words = sentence.split()
    return len(words)

# テキストを文単位に切り分け、各文の単語数をカウントしてデータフレームを作成する関数
def create_sentence_df(full_text):
    # テキストを前処理
    processed_text = preprocess_text(full_text)
    # 文単位に切り分け
    sentences = split_into_sentences(processed_text)
    # データフレームの作成
    data = {
        'Index': range(len(sentences)),
        'Sentence': sentences,
        'Word_Count': [count_words_in_sentence(sentence) for sentence in sentences]
    }
    df = pd.DataFrame(data)
    return df

# トップ10の文を表示する関数
def display_top_10_sentences(df):
    top_10_sentences = df.nlargest(10, 'Word_Count')
    print("\nTop 10 sentences by word count:")
    print(top_10_sentences[['Index', 'Sentence', 'Word_Count']])



# データフレームの作成
sentence_df = create_sentence_df(full_text)

sentence_df.info(100)

参考文献

  • https://www.gutenberg.org/files/11/11-h/11-h.htm

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です