66700


# 実現したいこと

[「プロジェクト・グーテンベルク](https://www.gutenberg.org/)」という著作権の切れた小説が公開されているサイトのテキストを自然言語処理のために、スクレイピングしようとしています。

公開されている形式は、`Plain Text UTF-8`と`html`がありますが、プレインテキストでの収集を考えています。  
テキストファイルとして出力するのではなく、json形式で情景描写と台詞を分けて取得したいです。

台詞に関しては、話者名が台詞前に書かれている場合は話者別に取得し、以下のようなイメージです。

[code]

    {
    "QUEEN":"Good Hamlet, cast thy nighted colour off, And let thine eye look
    like a friend on Denmark. Do not for ever with thy vailed lids Seek for
    thy noble father in the dust. Thou know’st ’tis common, all that lives
    must die, Passing through nature to eternity.",
    
    "HAMLET":"Ay, madam, it is common."
    }
    
[/code]

# 問題

しかし、複数の小説テキストを取得する場合、書式が異なっており、１つのプログラムでスクレイピングから`json`書き出しまでどのように行えば良いのかわからない状態です。

こういった場合、全ての書式に合わせられるプログラムを書くのはむずかしいので、何から始めたら良いのかアドバイスをいただきたいです。

## 書式が異なる具体的説明

例えば、モンゴメリの「[Anne of Green
Gables](https://www.gutenberg.org/files/45/45-0.txt)」と「[Chronicles of
Avonlea](https://www.gutenberg.org/files/1354/1354-0.txt)」では、著者も同じでテキストの形式が似ています。  
しかし、シェイクスピアの「[Hamlet](https://www.gutenberg.org/files/1524/1524-0.txt)」では、モンゴメリの文書にはなかった`Dramatis
Personæ`という登場人物の紹介項目があったり、以下のように台詞と話者の明記方法もちがいます。

[code]

    #モンゴメリ
    “I’m not expecting a girl,” said Matthew blankly. “It’s a boy I’ve come
    for. He should be here. Mrs. Alexander Spencer was to bring him over
    from Nova Scotia for me.”
    
    #シェイクスピア
    MARCELLUS. My good lord.
    
    HAMLET. I am very glad to see you.—Good even, sir.— But what, in faith,
    make you from Wittenberg?
    
[/code]


CC BY-SA 4.0
2020-05-17T01:43:24.343
66696
2020-05-17T03:58:20.757
question
python json web-scraping 自然言語処理
Web上のプレインテキストを大量にスクレイピングするときに形式が異なる文書をどのように処理するべきか


残念ながら、それぞれの形式に合わせて個別に処理するようなプログラムを書きたくないということであれば、プログラムへ入力する前に手作業で形式を揃える前処理をするしか無いでしょう。

アノテーションのついていないプレーンテキストを処理する場合はこのような前処理も自分で行う必要があります。この用途だとむしろある程度のアノテーションが既に付いている
HTML 版を元に処理する方がラクかもしれません。

また、質問の本題とは離れますが質問文にあるような JSON では会話を上手く表せません。同じ key が頻出してしまうでしょうし、そもそも JSON の
object は順番が保証されていません（array とは異なります）。


CC BY-SA 4.0
2020-05-17T03:47:03.343
66700
2020-05-17T03:47:03.343
19110
66696
answer


様々なWebページからスクレイピングが出来るのは、そうしたWebページがHTMLという統一した形式で書かれているからです。

書式が異なるテキストを、統一した書式に変換するのですから、個々の書式に合わせてプログラミングするしかありません。

シェークスピア(ハムレット）は戯曲で、劇中人物(Dramatis
Personæ)も書かれているようですから、モンゴメリー（赤毛のアン、アンの友達）のものより扱い易そうに思えます。  
まずは、ハムレットから取り掛かっては如何ですか？

英文テキストの自然言語処理（品詞判断、タグ付け、意味理解）を行うプログラムをお持ちなら、違ったアプローチもあるかと思います。


CC BY-SA 4.0
2020-05-17T03:58:20.757
66701
2020-05-17T03:58:20.757
217
66696
answer