2012-04-04 7 views
0

NLTKで使用したいテキストを含む何百ものファイルがあります。各行はがないが新しい文を含んでいますデータからコーパスをカスタム形式で作成する

 
বে,বচা ইয়াণ্ঠা,র্চা ঢার্বিত তোখাটহ নতুন, অ প্রবঃাশিত। 
তবে ' এ বং মুশায়েরা ' পত্রিব্যায় প্রকাশিত তিনটি লেখাই বইযে 
সংব্যজান ব্যরার জনা বিশেষভাবে পরিবর্ধিত। পাচ দাপনিকেব 
ড:বন নিয়ে এই বই তৈরি বাবার পরিব্যল্পনাও ম্ভ্রাসুনতন 
সামন্তেরই। তার আর তার সহকারীদেব নিষ্ঠা ছাডা অল্প সময়ে 
এই বই প্রব্যাশিত হতে পারত না।,তাঁদের সকলকে আমাধ 
নমস্কার জানাই। 
বতাব্যাতা শ্রাবন্তা জ্জাণ্ণিক 
জানুয়ারি ২ ণ্ট ণ্ট ৮ 
Total characters: 378 

注:ここではそのようなファイルです。むしろ、センテンスターミネータは、英語のピリオドと同じですが、 '。'シンボル。

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

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

ありがとうございます!

+0

_corpus_が何であるかを説明すると... – C2H5OH

+0

コーパスは大量のテキストです。私はNLTKコーパスリーダーを使用する予定です(または、必要に応じて自分自身を書く)。 NLTKを使っている人は、コーパスが何であるかを知っているでしょう。 –

+0

@ C2H5OH http://en.wikipedia.org/wiki/Text_corpus – javanna

答えて

1

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

コンストラクタには、文および単語のトークン化関数のオプションの引数もあります。したがって、独自のメソッドを渡してテキストを文に分解できます。単語と文の検出が本当に単純である場合、すなわち| nltkのRegexpTokenizerファミリからトークン化機能を設定することもできますし、ゼロから独自に書き込むこともできます。 (あなた自身で書く前に、ドキュメントとコードを調べたり、どのような入力があったのかを知るためにスタブを書くなど)。 nltkのPunktSentenceTokenizerは、無制限の統計アルゴリズムを使用して、センテンスターミネータのどの用途が実際に文を終了するかを学習します。

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

+0

ありがとう!それは非常に役に立つはずです。私はそれを試して、あなたに戻ってきます。文の規則は単純です - それは常に|他の用途はありません。だから私はPunktSentenceTokenizerを訓練する必要はないと思う。 –

0

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

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

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

2)ファイルオブジェクトの組み込みreadlines()関数は、改行文字を区切り文字として使用してファイル内のコンテンツを改行します。だから、行をキャッシュするためのコードを書く必要があります。見える。 '|'キャッシュされた行を1つの単一の文として扱い、MyDataクラスに入れてください

+0

回線上でランダムアクセスが必要なことが分かっていない限り、itertools.islice(f、-1)で 'for l 'を実行するときれいになります:' – aaronasterling