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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

自然言語処理

自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

Q&A

解決済

1回答

321閲覧

日本語概念辞書を用いた自然言語処理に関して

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

自然言語処理

自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

0グッド

0クリップ

投稿2018/07/21 08:14

編集2018/07/21 14:53

前提・実現したいこと

日本語概念辞書を用いて言語処理をしようとしています。
配列に入っている単語のWordNetにおけるsynsetと呼ばれる同義語のグループを抽出しようとしています。

発生している問題・エラーメッセージ

以下が現状の出力で、同義語のグループのない単語もあるので、
その場合は配列に入れないように処理をしたつもりでしたが、
空でも配列にappendされてしまっています。
また、「Synset()」の部分を削除して()内のみ抽出したい場合の
処理をどのように行えばいいかわからず、困っています。

['高知', '日本', '横浜'] [[], [Synset('japan.n.02')], [Synset('yokohama.n.01')]]

取得したい出力

['japan.n.02', 'yokohama.n.01']

該当のソースコード

python

1from nltk.corpus import wordnet as wn 2 3word_list = ['高知', '日本', '横浜'] 4synsets_list = [] 5for w in word_list: 6 result = wn.synsets(w, lang='jpn') 7 if result is not None: 8 synsets_list.append(result) 9synsets_list

### ご回答を受けて試したこと

python

1from nltk.corpus import wordnet as wn 2word_list= ['高知', '日本', '横浜'] 3synsets_list = [] 4for w in word_list: 5 result = wn.synsets(w, lang='jpn') 6 if result != []: 7 synsets_list.extend(result) 8synsets_list

一つ目の[]に関する問題は解決できましたが、
「Synset()」の部分を削除して()内のみ抽出したい場合の
処理をどのように行えばいいかわからず、困っています。

出力

[Synset('japan.n.02'), Synset('yokohama.n.01')]

補足情報(FW/ツールのバージョンなど)

WordNet Interface
python 3.6

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

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

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

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

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

guest

回答1

0

ベストアンサー

resultの型を確認してみましたか?
空のリストとNoneは無関係ですよ。なぜNoneと比較しようと思ったんでしょう。

空のリストであるか判定すれば良いです。

Python

1if result != []: 2 synsets_list.append(result)

なお、普通は次のように書きます。

Python

1if result: 2 synsets_list.append(result)

取得したい出力

['japan.n.02', 'yokohama.n.01']

リストを継ぎ足したいときは、list.appendではなくlist.extendが便利です。
加算演算子を使っても書けます。

投稿2018/07/21 08:21

編集2018/07/21 08:23
LouiS0616

総合スコア35660

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

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

退会済みユーザー

退会済みユーザー

2018/07/21 09:15 編集

ご回答いただきましてありがとうございます。 if result != []: だけですと、 [Synset('japan.n.02')]から'japan.n.02'を抽出することはできないのですが、この部分に関しましてはどのように処理すれば良いでしょうか。 可能でしたら教えていただけますと幸いです。
LouiS0616

2018/07/21 09:18

[[Synset('japan.n.02')], [Synset('yokohama.n.01')]] になっているということですか?
退会済みユーザー

退会済みユーザー

2018/07/21 09:25

はい、そうです。ご回答を受けて試したことに追記させていただきました。
LouiS0616

2018/07/21 09:26

17:23分に回答に追記した内容は確認されましたか。更新してご確認ください。
退会済みユーザー

退会済みユーザー

2018/07/21 14:55

先ほどの返事が誤っていました。 ['japan.n.02', 'yokohama.n.01']ではなく、 [Synset('japan.n.02'), Synset('yokohama.n.01')]になっているということです。
LouiS0616

2018/07/21 15:21

うーん... それらしいメソッドが転がっていると思って探したんですが、見つかりませんでした。 強引な方法でも良ければ、Synsetインスタンスのrに対して、str(r)[8:-2]を取ればいけます。 ただし全く持って美しくない方法なので、他の手段があるならそれに越したことはないです。
退会済みユーザー

退会済みユーザー

2018/07/21 15:42

わかりました。ありがとうございました。
hayataka2049

2018/07/21 20:12

r.name()で取れませんか?
LouiS0616

2018/07/22 01:13

@hayataka2049 さん 確かに取れますね。コメントありがとうございます。
退会済みユーザー

退会済みユーザー

2018/07/23 01:01

@hayataka2049 さん ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問