質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

1651閲覧

NLTKでの自然言語処理をする際のconditions関数について

jimmypage0311

総合スコア22

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2017/08/10 06:00

編集2022/01/12 10:55

前回、Swiftの質問をTeratailとstackover flow上で質問したところ
stackover flowでの方が質問に対する回答が早かったので
terataikとstackover flowにマルチポストを行います。
https://ja.stackoverflow.com/questions/37088/nltk%E3%81%A7%E3%81%AE%E8%87%AA%E7%84%B6%E8%A8%80%E8%AA%9E%E5%87%A6%E7%90%86%E3%82%92%E3%81%99%E3%82%8B%E9%9A%9B%E3%81%AEconditions%E9%96%A2%E6%95%B0%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

現在オライリーから出版されている、入門 自然言語処理を独学しております。

文章中に出てくる動詞について過去形と過去分詞形について分布の違いを調べるために

http://www.nltk.org/book/ch05.htmlを参照し

python

1wsj = nltk.corpus.treebank.tagged_words(tagset='universal') 2 3cfd1 = nltk.ConditionalFreqDist(wsj) 4 5[w for w in cfd1.conditions() if 'VBD' in cfd1[w] and 'VBN' in cfd1[w]]

と記述しているのですが、nltkのconditions()関数自体がタグに対応しておらず
上記のコードが参照通りに動きません。
現在のnltkで上記のconditions()関数に対応した関数はあるのでしょうか。

わかる方よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimmypage0311

2017/08/10 06:13

こちらでの質問を取り消させていただきます。
quickquip

2017/08/10 06:16

ヘルプに**書いてあるとおり** こちらで解決したらあちらに、あちらで解決したらこちらに、ちゃんと解決した経緯を転記するとかリンクを貼るとかして、放置さえしなければいいんじゃないでしょうか。
jimmypage0311

2017/08/10 06:27

ご指摘ありがとうございます。マルチポストの追記を行いました。
guest

回答1

0

最新のNLTKでは2箇所変更が必要です。
1つ目はtreebankコーパスでtagsetをwsjに変更が必要です。最新のuniversalでは簡易化されたタグしかなくここで必要な過去分詞などのレベルでアノテーションされていません。

2つ目はConditionalFreqDistのgetの返り値が変更されています

nltkバージョン3.5にて以下のコードで動くことを確認しました

import nltk wsj = nltk.corpus.treebank.tagged_words(tagset="wsj") # tagsetを変更 cfd1 = nltk.ConditionalFreqDist(wsj) result = [] for w in cfd1.conditions(): if any([k in ['VBD', 'VBN'] for k in cfd1[w].keys()]): # cfd1[w].keys()でアクセス result.append(w) result >>> ['was', 'named', 'used', 'caused', 'exposed', ...

投稿2020/07/14 15:36

xgb

総合スコア33

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問