0

NLTKで使用したいテキストを含むファイルが何百もあります。そのようなファイルの1つを次に示します。

বে、বচাইয়াণ্ঠা、র্চাঢার্বিততোখাটহ
তবে 'এবংমুশায়েরা' পত্রিব্যায়প্রকাশিততিনটিলেখাইবইযে
সংব্যজানব্যরারজনাবিশেষভাবেপরিবব পাচদাপনিকেব
ড:বননিয়েএইবইতৈরিবাবারপরিব্যল্
সামন্তেরই。তারআরতারসহকারীদেবনিষ্ঠাছাডাঅল
এইবইপ্রব্যাশিতহতেপারতনা।、তাঁদেদ
নমস্কারজানাই。
বতাব্যাতাশ্রাবন্তাজ্জাণ্ণিক
জানুয়ারি২ণ্টণ্ট৮
総文字数:378

各行には新しい文が含まれていないことに注意してください。むしろ、文のターミネーター(英語のピリオドに相当)は「。」です。シンボル。

誰かが私のコーパスを作成するのを手伝ってくれませんか?変数MyDataにインポートする場合は、MyData.words()とMyData.sents()にアクセスする必要があります。また、最後の行はコーパスに表示されるべきではありません(単に文字数が含まれているだけです)。

すべてのファイルのデータに対して一度に操作を実行する必要があることに注意してください。

前もって感謝します!

4

2 に答える 2

1

wordsファイルを自分で入力したり、sentsメソッドを提供したりする必要はありません。でコーパスを読んでくださいPlaintextCorpusReader。そうすれば、それらが提供されます。コーパスリーダーコンストラクターは、ファイルのパスとファイル名のパターン、および入力エンコーディングの引数を受け入れます(必ず指定してください)。

コンストラクターには、文と単語のトークン化関数のオプションの引数もあるため、独自のメソッドを渡して、テキストを文に分割できます。単語と文の検出が本当に簡単な場合、つまり| 文字には他の用途があります。nltkのRegexpTokenizerファミリからトークン化関数を構成することも、独自の関数を最初から作成することもできます。(独自に作成する前に、ドキュメントとコードを調べるか、スタブを作成して、どのような入力で呼び出されるかを確認してください。)

文の境界を認識することが重要な場合は、後でnltkのPunktSentenceTokenizerをトレーニングする方法を理解できます。これは、監視されていない統計アルゴリズムを使用して、文のターミネータのどの使用法が実際に文を終了するかを学習します。

コーパスリーダーの構成がかなり複雑な場合は、に特化したクラスを作成すると便利な場合がありますPlaintextCorpusReader。しかし、多くの場合、それは必要ありません。NLTKコードを見て、グーテンベルクコーパスがどのように実装されているかを確認してください。これPlainTextCorpusReaderは、コンストラクターに適切な引数を持つ単なるインスタンスです。

于 2012-04-07T12:33:02.137 に答える
0

1)最後の行を取り除くのはかなり簡単です。

f = open('corpus.txt', 'r')
for l in f.readlines()[:-1]:
   ....

forループの[:-1]は、最後の行をスキップします。

2)ファイルオブジェクトの組み込みのreadlines()関数は、改行文字を区切り文字として使用して、ファイル内のコンテンツを行に分割します。したがって、「|」まで行をキャッシュするコードを記述する必要があります。見られます。'|'の場合 MyDataが検出されたら、キャッシュされた行を1つの文として扱い、クラスに配置します

于 2012-04-05T08:02:14.693 に答える