1. ホーム
  2. python

[解決済み] NLTKで新しいコーパスを作成する

2023-05-27 19:37:17

質問

タイトルの答えは、ドキュメントを読んでくることだと思うのですが、その前に NLTKの本 を読んでみましたが、答えが出ません。Pythonは初心者なので。

私はたくさんの .txt ファイルがあり、NLTKが提供するコーパス関数をコーパス nltk_data .

試しに PlaintextCorpusReader よりも先に進めませんでした。

>>>import nltk
>>>from nltk.corpus import PlaintextCorpusReader
>>>corpus_root = './'
>>>newcorpus = PlaintextCorpusReader(corpus_root, '.*')
>>>newcorpus.words()

をどのようにセグメント化すればよいのでしょうか? newcorpus の文を分割するにはどうしたらよいでしょうか?punktの関数を使ってみたのですが、punktの関数では読み取れなかった PlaintextCorpusReader のクラスを読み取ることができません。

また、分割されたデータをテキストファイルに書き出す方法を教えてください。

どのように解決するのですか?

私は PlaintextCorpusReader は、少なくとも入力言語が英語の場合は、punkt tokenizer ですでに入力がセグメント化されていると思います。

PlainTextCorpusReaderのコンストラクタです。

def __init__(self, root, fileids,
             word_tokenizer=WordPunctTokenizer(),
             sent_tokenizer=nltk.data.LazyLoader(
                 'tokenizers/punkt/english.pickle'),
             para_block_reader=read_blankline_block,
             encoding='utf8'):

リーダーには単語や文のトークナイザーを渡すことができますが、後者については、すでにデフォルトで nltk.data.LazyLoader('tokenizers/punkt/english.pickle') .

単一の文字列の場合、トークナイザーは以下のように使用されます(説明は ここで を参照してください)。

>>> import nltk.data
>>> text = """
... Punkt knows that the periods in Mr. Smith and Johann S. Bach
... do not mark sentence boundaries.  And sometimes sentences
... can start with non-capitalized words.  i is a good variable
... name.
... """
>>> tokenizer = nltk.data.load('tokenizers/punkt/english.pickle')
>>> tokenizer.tokenize(text.strip())