

現在Pythonを用いてJupyter
Notebook上で文章データを取得し、前処理する方法を学んでいる学生です。文章データを取得するところまでは成功し、続いて文章を前処理する段階に入っているのですがここで躓いています。

前処理でやりたいことは以下の3つです。

  1. 本文の最初と最後を区切り文字として `split()` メソッドで削除
  2. 文字列の置換や正規表現を使用して不要な文字列や記号を削除
  3. 不要な文字列の削除が終わったら句点で文章を一文単位で分割

参考書通りにコードを入力したのですが正しく処理されません。プロフェッショナルの皆様方に、どこが間違っているのか指摘して頂けるとありがたいです  
(ちなみに、このコードを打つ前に既に文章のデータはちゃんと取得してあります)。

[code]

    import re
    
    first_sentence = '私は、その男の写真を三葉、見たことがある。'
    last_sentence = '神様みたいないい子でした'
    _, text = original_text.split(first_sentence)
    text, _ = text.split(last_sentence)
    text = first_sentence + text + last_sentence
    
    text = text.replace('|', '').replace(' ', '')
    text = re.sub('《\w+》',  '', text)
    text = re.sub('[#\w+]', '', text)
    text = text.replace('\r', '').replace('\n', '')
    text = re.sub('[、「」?]', '', text)
    text = re.sub('(\w+)', '', text)
    text = re.sub('[\w+]', '', text)
    
    sentences = text.split('。')
    print('文の数:', len(sentences))
    sentences[:10]
    
[/code]


CC BY-SA 4.0
2019-12-23T03:00:26.507
61691
2020-07-24T04:14:16.777
2019-12-23T04:02:54.960
36669
36669
question
python jupyter-notebook
文章の前処理のやり方が分かりません、助けて頂けるとありがたいです


コメントを参考に全角と半角記号を使い分けることで、正しく処理されるのではないでしょうか。

> 本文の最初と最後を区切り文字として split() メソッドで削除

できてます。

> 文字列の置換や正規表現を使用して不要な文字列や記号を削除

サンプルコードを参考に、`text.replace`以下を見直してみてください。

> 不要な文字列の削除が終わったら句点で文章を一文単位で分割

できてます。  
※句点のみで区切ると見出しが次の本文に結合されます。

### サンプルコード

実行する前に[青空文庫](https://www.aozora.gr.jp/cards/000035/card301.html)からテキストファイル(ルビあり)のzipファイルをダウンロード、解凍してください。  
`file_path`を解凍後に生成されたテキストファイルのパスに書き換えて実行してください。

[code]

    import re
    
    # todo file_pathを必要に応じて書き換えてください
    file_path = r'ningen_shikkaku.txt'
    with open(file_path, 'r', encoding='shift_jis') as f:
        original_text = f.read()
    
    first_sentence = '私は、その男の写真を三葉、見たことがある。'
    last_sentence = '神様みたいないい子でした'
    _, text = original_text.split(first_sentence)
    text, _ = text.split(last_sentence)
    text = first_sentence + text + last_sentence
    
    text = text.replace('｜', '').replace('　', '')
    text = re.sub('《\w+》',  '', text)
    text = re.sub('［＃[^］]+］', '', text)
    text = text.replace('\r', '').replace('\n', '')
    text = re.sub('[、「」?]', '', text)
    text = re.sub('（\w+）', '', text)
    text = re.sub('［\w+］', '', text)
    
    sentences = text.split('。')
    print('文の数:', len(sentences))
    print(sentences[45:49])
    
[/code]

### 出力内容

[code]

    文の数: 1177
    所謂死相というものにだってもっと何か表情なり印象なりがあるものだろうに人間のからだに駄馬の首でもくっつけたならこんな感じのものになるであろうかとにかくどこという事なく見る者をしてぞっとさせいやな気持にさせるのだ
    私はこれまでこんな不思議な男の顔を見た事がやはりいちども無かった
    第一の手記恥の多い生涯を送って来ました
    
[/code]

### 編集前の文(青空文庫の太宰治『人間失格』-テキストファイル(ルビあり)より抜粋して引用)

[code]

    　所謂《いわゆる》「死相」というものにだって、もっと何か表情なり印象なりがあるものだろうに、人間のからだに駄馬の首でもくっつけたなら、こんな感じのものになるであろうか、とにかく、どこという事なく、見る者をして、ぞっとさせ、いやな気持にさせるのだ。私はこれまで、こんな不思議な男の顔を見た事が、やはり、いちども無かった。
    ［＃改頁］
    
    ［＃３字下げ］第一の手記［＃「第一の手記」は大見出し］
    
    　恥の多い生涯を送って来ました。
    
[/code]


CC BY-SA 4.0
2020-07-24T04:14:16.777
68875
2020-07-24T04:14:16.777
9820
61691
answer