2017-04-19 21 views
1

私はNLTK(http://www.nltk.org/)を初めて使用しています。私はNLTKのPythonライブラリを使用したいが、コーパスにはBNCを使用する。私はこのコーパスがNLTKデータのダウンロードを通じて配布されているとは思わない。 NLTKで使用するBNCコーパスをインポートする方法はありますか?もしそうなら、どうですか?私はBNCCorpusReaderと呼ばれる関数を見つけましたが、それをどのように使用するかは考えていません。また、BNCサイトではコーパス(http://ota.ox.ac.uk/desc/2554)をダウンロードできました。私はentrophyの提案を試みたが、しているNLTKでBritish National Corpusを使用する

http://www.nltk.org/api/nltk.corpus.reader.html?highlight=bnc#nltk.corpus.reader.BNCCorpusReader.word

アップデート次のエラーを取得する:

raise IOError('No such file or directory: %r' % _path) 
OSError: No such file or directory: 'C:\\Users\\jason\\Documents\\NetBeansProjects\\DemoCollocations\\src\\Corpora\\bnc\\A\\A0\\A00.xml' 

コーパスに読むために私のコード:

bnc_reader = BNCCorpusReader(root="Corpora/bnc", fileids=r'[A-K]/\w*/\w*\.xml') 

そして、コーパスではl C:\ユーザーはジェイソン\ドキュメント\ \ NetBeansProjects \ DemoCollocations \ SRC \コーパス\ BNC \

+0

あなたの目的は何ですか?あなたはNLTKを使用する必要がありますか?私はPythonをよく知らないし、NLTKを使ったこともありませんでしたが、スタンフォードコアNLPを使ってJavaでBNCを処理しました。私の目標は、単語の対の間の依存関係を得るために解析する正しいコーパスを構築することでした。だから、BNCのxmlファイルから始めて、私はすべての文章をxmlパーサーで再作成しました。その後、各文章をCore NLPで処理しました。 あなたの目標が単純にコーパスをインポートするだけの場合、正直なところ私はあなたに返答できませんが、最後のインスタンスではxmlコーパスのtxt形式を作成し、Pythonに渡して最後に文字列で処理します。 –

+0

@ s.dallapalmaこんにちは。私はNLTKを使用する必要はありませんが、単語の "Collocations"を見つけるために使用できるライブラリを使用できるようにする必要があります。私はStanford Core NLPを見ましたが、Collocations機能がないと言われました。 – jason

答えて

2

コロケーション抽出のためのNLTKの例の使用に関しては、以下のガイドを見てみましょう:A how-to guide by nltk on collocations extraction

にocated

BNCコーパスリーダーに関する限り、すべての情報はドキュメントの中にありました。

[(('of', 'the'), 0.004902261167963723), (('in', 'the'),0.003554139346773699), 
(('.', 'The'), 0.0034315828175746064), (('Gift', 'Aid'), 0.0019609044671854894), 
((',', 'and'), 0.0018996262025859428), (('for', 'the'), 0.0018383479379863962), ... ] 

をそして、あなたはスコアを使用してそれらを並べ替えしたい場合、あなたはこの

sorted_bigrams = sorted(bigram for bigram, score in scored) 

print(sorted_bigrams) 

結果のような何かを試みることができる:

from nltk.corpus.reader.bnc import BNCCorpusReader 
from nltk.collocations import BigramAssocMeasures, BigramCollocationFinder 

# Instantiate the reader like this 
bnc_reader = BNCCorpusReader(root="/path/to/BNC/Texts", fileids=r'[A-K]/\w*/\w*\.xml') 

#And say you wanted to extract all bigram collocations and 
#then later wanted to sort them just by their frequency, this is what you would do. 
#Again, take a look at the link to the nltk guide on collocations for more examples. 

list_of_fileids = ['A/A0/A00.xml', 'A/A0/A01.xml'] 
bigram_measures = BigramAssocMeasures() 
finder = BigramCollocationFinder.from_words(bnc_reader.words(fileids=list_of_fileids)) 
scored = finder.score_ngrams(bigram_measures.raw_freq) 

print(scored) 

というの出力は次のようになります。

[('!', 'If'), ('!', 'Of'), ('!', 'Once'), ('!', 'Particularly'), ('!', 'Raising'), 
('!', 'YOU'), ('!', '‘'), ('&', 'Ealing'), ('&', 'Public'), ('&', 'Surrey'), 
('&', 'TRAINING'), ("'", 'SPONSORED'), ("'S", 'HOME'), ("'S", 'SERVICE'), ... ] 
+0

お返事ありがとうございます。あなたが提供したコードを試しましたが、コーパスの読み込みに問題があります。私はそれがおそらく私のPythonの経験の欠如に起因すると確信しています。コードを編集してエラーの詳細を追加します。お手伝いできれば幸いです。 – jason

+0

ルートディレクトリは /テキストです。したがって、読者をこのコードに変更すると、bnc_reader = BNCCorpusReader(root = "Corpora/bnc/Texts"、fileids = r '[AK]/\ w */\ w * \。xml') ' – entrophy

+0

Ah 、それはそれをしました。ダウンロードしたフォルダ構造が違うからだと思います。私は使用した: bnc_reader = BNCCorpusReader(ルート= "コーパス/ bnc/2554 /ダウンロード/テキスト"、fileids = r '[A-K]/\ w */\ w * \。xml') – jason

関連する問題