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