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

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

ただいまの
回答率

90.53%

  • Python

    7884questions

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

  • Python 3.x

    6296questions

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

  • 自然言語処理

    116questions

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

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 146

tenjin

score 212

 前提・実現したいこと

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

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

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

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

取得したい出力

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

 該当のソースコード

from nltk.corpus import wordnet as wn

word_list = ['高知', '日本', '横浜']
synsets_list = []
for w in word_list:
    result = wn.synsets(w, lang='jpn')
    if result is not None: 
        synsets_list.append(result)
synsets_list

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

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

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

出力

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

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

WordNet Interface
python 3.6

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

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

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

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

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

if result: 
    synsets_list.append(result)

取得したい出力

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/21 18:14 編集

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

    キャンセル

  • 2018/07/21 18:18

    [[Synset('japan.n.02')], [Synset('yokohama.n.01')]] になっているということですか?

    キャンセル

  • 2018/07/21 18:25

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

    キャンセル

  • 2018/07/21 18:26

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

    キャンセル

  • 2018/07/21 23:55

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

    キャンセル

  • 2018/07/22 00:21

    うーん...
    それらしいメソッドが転がっていると思って探したんですが、見つかりませんでした。

    強引な方法でも良ければ、Synsetインスタンスのrに対して、str(r)[8:-2]を取ればいけます。
    ただし全く持って美しくない方法なので、他の手段があるならそれに越したことはないです。

    キャンセル

  • 2018/07/22 00:42

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

    キャンセル

  • 2018/07/22 05:12

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

    キャンセル

  • 2018/07/22 10:13

    @hayataka2049 さん
    確かに取れますね。コメントありがとうございます。

    キャンセル

  • 2018/07/23 10:01

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

    キャンセル

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

  • ただいまの回答率 90.53%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Python

    7884questions

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

  • Python 3.x

    6296questions

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

  • 自然言語処理

    116questions

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