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

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

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

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

自然言語処理

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

Q&A

1回答

2712閲覧

【gensim】TF-IDFで論文からキーワード抽出する

osuzu

総合スコア16

Python 3.x

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

自然言語処理

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

0グッド

0クリップ

投稿2020/04/10 06:32

前提・実現したいこと

英語/日本語論文からPythonライブラリのgensimでTF-IDF値を求め、
重要度の高い単語上位5つ程度をキーワードとして抽出したいです。
とりあえずサンプル文章を使ってテストしています。

疑問

こちらのサイト様等参考にして、TF-IDF値を算出しましたが、その取扱いが分かりません。

TF-IDF値の結果を見ると(ソースコードをご参照ください)、
5つの文(texts)に重複して入っている単語は文ごとにTF-IDF値が出ています。
例えば、"b"という単語は5つの文のうち4つに入っており、それぞれ異なるTF-IDF値がでています。
その定義から、文ごとにTF-IDFが出るのは当然なのですが、こちらの結果を見ると、1つの単語に対して1つのTF-IDF値が一意に決まっているように見受けられます。

このようにTF-IDF値を1単語について一意に決めるにはどうすればよいでしょうか。

なにぶん初学者で見当違いのことをいっているかもしれませんが、よろしくお願いいたします。

該当のソースコード

python

1from gensim import corpora,models 2 3# サンプル文章 4texts = [['a', 'b', 'c', 'a'], 5 ['c', 'b', 'c'], 6 ['b', 'b', 'a'], 7 ['a', 'c', 'c'], 8 ['c', 'b', 'a']] 9 10dictionary = corpora.Dictionary(texts) 11corpus = [dictionary.doc2bow(text) for text in texts] 12 13tfidf = models.TfidfModel(corpus) 14corpus_tfidf = tfidf[corpus] 15 16texts_tfidf = [] # id -> 単語表示に変えた文書ごとのTF-IDF 17for doc in corpus_tfidf: 18 text_tfidf = [] 19 for word in doc: 20 text_tfidf.append([dictionary[word[0]],word[1]]) 21 texts_tfidf.append(text_tfidf) 22 23# 表示 24print('===結果表示===') 25for text in texts_tfidf: 26 print(text) 27 28##結果 29===結果表示=== 30[['a', 0.816496580927726], ['b', 0.408248290463863], ['c', 0.408248290463863]] 31[['b', 0.447213595499958], ['c', 0.894427190999916]] 32[['a', 0.447213595499958], ['b', 0.894427190999916]] 33[['a', 0.447213595499958], ['c', 0.894427190999916]] 34[['a', 0.5773502691896257], ['b', 0.5773502691896257], ['c', 0.5773502691896257]] 35

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

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

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

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

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

guest

回答1

0

その定義から、文ごとにTF-IDFが出るのは当然なのですが、こちらの結果を見ると、1つの単語に対して1つのTF-IDF値が一意に決まっているように見受けられます。

はい。「文ごとにTF-IDFが出るのは当然」で合っています。

「こちらの結果を見ると、1つの単語に対して1つのTF-IDF値が一意に決まっているように見受けられます」という気持ちもわかりますが、このページでいったい何をやっているのかはコードが公開されていない以上、他人に回答できることはありません。


重要度の高い単語上位5つ程度をキーワードとして抽出したい

とのことですが、
(A) 全体が「論文の集合」で、重要度の高い単語を抽出したい対象が「論文」なら、論文の集合と論文を与えると、論文の集合という文脈の中で、論文の中の重要度の高い単語上位を出すのが目的ですね。
(B) 全体が「論文(=文の集合)」で、重要度の高い単語を抽出したい対象が「文」なら、論文と文を与えると、論文という文脈の中で、文の中の重要度の高い単語上位を出すのが目的ですね。

このようにTF-IDF値を1単語について一意に決めるにはどうすればよいでしょうか。

という必要はでてこないはずですね。

サンプル文章を使ってテストしています

ということですので、今はテスト的に(B)のコードを書いているけれども、本当にやりたいことは(A)という状況を想像しました。
そのあたり、やりたいことを整理する(整理して質問に記載する)のがよいかと思います。

投稿2020/04/10 06:40

編集2020/04/10 06:49
quickquip

総合スコア11235

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

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

osuzu

2020/04/10 06:48

早速のご回答ありがとうございます。 その他のサイトを見ても、TF-TDF値を一意に決めている場合が多い印象でした。 これについてもう少し勉強したいと思います。ありがとうございました。
osuzu

2020/04/10 07:00

分かりにくくすみません。 いくつかの論文が手元にあり、それぞれについて5個程度のキーワードを抽出することが目的です(B)。 1つの論文から全文章を取り出し、上記のTF-IDFを求めると、文ごとにIF-IDFが出てしまうので一意に決める必要があると思ったのですが、よく整理したいと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問