5

<salutation><body><signature><reply text>メールを分析するアプリケーションを作成していますが、メール テキストを解析して名前付きコンポーネントなどに分解する Python ライブラリを使用できれば、かなりの時間を節約できます。

たとえば、次のテキスト " Hi Dave,\nLets meet up this Tuesday\nCheers, Tom\n\nOn Sunday, 15 May 2011 at 5:02 PM, Dave Trindall wrote: Hey Tom,\nHow about we get together ..." は次のように解析されます。

Salutation: "Hi Dave,\n"
Body: "Lets meet up this Tuesday\n"
Signature: "Cheers, Tom\n\n"
Reply Text: "On Sunday, 15 May 2011 at 5:02 PM, Dave Trindal wrote: ..."

この種の問題に対する完全な解決策がないことはわかっていますが、適切な近似を行うライブラリでさえ役立ちます。どこで見つけることができますか?

4

4 に答える 4

5

https://github.com/Trindaz/EFZP

これにより、元の質問で提示された機能に加えて、Outlook や Gmail などの一般的な電子メール クライアントから英語のネイティブ スピーカーが作成した電子メールに一般的に表示される電子メール ゾーンの公正な認識が提供されます。

于 2011-05-18T04:13:14.913 に答える
3

含まれる単語の種類に基づいて各行にスコアを付けると、かなり良い指標が得られる場合があります。

EG 冒頭近くに挨拶の言葉がある行は挨拶です (また、挨拶には過去時制を参照するフレーズが含まれる場合があります。たとえば、前回お会いできてよかったです)。

Body には通常、「movie、concert」などの単語が含まれます。また、動詞 (go to、run、walk など) と、疑問符と提供物 (たとえば、want to、can we、should we、prefer..) も含まれます。 . http://nodebox.net/code/index.php/Linguistics#verb_conjugation http://ogden.basic-english.org/ http://osteele.com/projects/pywordnet/をチェックしてください

署名には結びの言葉が含まれます。

必要な構造のメッセージを含むデータソースが見つかった場合は、頻度分析を行って、各単語が各セクションでどのくらいの頻度で発生するかを確認できます。

各単語にはスコア [挨拶スコア、本文スコア、署名スコアなど] が付けられます。たとえば、hello は、挨拶文で 900 回、本文で 10 回、署名で 3 回発生する可能性があります。これは hello が割り当てられることを意味します [900, 10, 3, ..] 歓声が割り当てられる可能性があります [10,3,100,..]

これで、約 500,000 語の大きなリストが作成されます。広い範囲を持たない単語は役に立ちません。たとえば、catch は [100,101,80..] = 21 の範囲 (追いついて良かった、魚を捕まえに行きたい、後で捕まえる) を持つ可能性があります。キャッチはどこでも発生する可能性があります。

単語数を約 10,000 に減らすことができるようになりました

ここで、行ごとに、[挨拶のスコア、本文のスコア、署名のスコア、..] の形式のスコアをその行に付けます。

このスコアは、各単語のベクトル スコアを加算して計算されます。

たとえば、「あなたの番号を教えてくれてありがとう」という文は次のようになります: [900, 10, 3, ..] + [10,3,100,..] + .. + .. + = [900+10+.., 10+3+..,3+100,..] =[1023,900,500,..] 言う

最大数が挨拶スコア位置の先頭にあるため、この文は挨拶です。

次に、行の 1 つにスコアを付けて、その行がどのコンポーネントにあるべきかを確認する必要がある場合は、単語ごとにそのスコアに追加します

計算の複雑さと精度の間には常にトレードオフがあります。適切な単語のセットを見つけて、計算の基礎となる適切なモデルを作成できれば、それは役に立ちます。

于 2011-05-17T07:59:38.817 に答える
1

頭に浮かぶ最初のアプローチ (必ずしも最良であるとは限りません...) は、分割を使用することから始めることです。ここに少しのコードとものがあります

linearray=emailtext.split('\n') これで、それぞれが段落などのような文字列の配列になりました

したがって、linearray[0] には挨拶が含まれます。

返信テキストの開始位置を決定するのは少し難しいです。その直前に二重の改行があることに気付きました。後ろから検索して、最後の改行が返信テキストの開始を示していることを願っています。

または、予想される署名の単語をいくつか保存し、歓声、敬意など、正面からそれらを検索します。

署名がどこにあるかがわかれば、あとは簡単です

これが役に立ったことを願っています

于 2011-05-17T03:58:21.307 に答える