2016-07-06 5 views
0

こんにちは、このS-> NNP VBZ NNPのような文法があるとしましょう。しかし、NNPの数は膨大でファイル内に数多く存在します。それを文法に直接ロードするにはどうしたらいいですか?あるいは、すべての単語を指定するのではなく、どのように文法がコーパスから単語を取り出すことができるでしょうか?カスタム文法を使ったNLP nltk

lexicon = {} 
with open('path/to/the/files/NNP.txt', 'r') as NNP_File: 
    # 'with' automatically closes the file once you're done 
    # now update the 'NNP' key in your lexicon with every word in the file. 
    # a set seems like a good idea but it depends on your purposes 
    lexicon['NNP'] = set(NNP_File.readlines()) 

この設定が適しています:あなただけのラインで読み取ることにより、辞書を作りたい、各POSは、別々の行にそのタグを持つすべての可能な単語からなる独自のテキストファイルを持っていると仮定すると、

+0

と上記その最初のアプローチに従うことができ、「文法はコーパスから単語を取り出し、」によって、あなたは、あなたが生成する意味ですか最も可能性の高い次の単語に基づくテキスト?例えばランダムなNNPで始まり、最も可能性の高いVBZとNNPを選択してそれに従います。 – Clay

+0

こんにちはクレイ、いいえ、私はそれを意味しません。私は、1000 NNPと言うテキストファイルを持っているのですが、NNP - > "word1"のように明示的に言及するのではなく、ファイルから単語を取り出す文法が必要です。 "word2" | ........ – vku

+0

文法を何に使いたいですか?それは解析用かテキスト生成用ですか? – alexis

答えて

1

いくつかの単語が指定された品詞のものかどうかを調べる。それはあなたが構築している何のために良いでしょう場合にも、周りにそれを反転し、言葉のキーにすることができます:

for word in NNP_File.readlines(): 
    if lexicon.has_key(word): 
     lexicon[word].update(['NNP']) 
    else: 
     lexicon[word] = set(['NNP']) 

テキストファイルが別の方法をフォーマットされている場合は、別のアプローチを取る必要があります。あなたが言及した形式の文法ラインを生成するためにEDIT、あなたが何かのように、

with open('path/NNP.txt', 'r') as f: 
    NNP_terminal_rule = 'NNP -> ' + '|'.join(f) 
    # str.join() takes an iterable, so the file object works here. 
関連する問題