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

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

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

Mecabは、オープンソースの形態素解析エンジンです。 言語、辞書、コーパスに依存しない汎用的な設計を基本方針としています。 Mecabの由来は、開発者の好物である和布蕪(めかぶ)から名づけられました。

Python

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

Q&A

0回答

1944閲覧

empty vocabulary; perhaps the documents only contain stop words を直したいです。

rickyakagi

総合スコア0

Mecab

Mecabは、オープンソースの形態素解析エンジンです。 言語、辞書、コーパスに依存しない汎用的な設計を基本方針としています。 Mecabの由来は、開発者の好物である和布蕪(めかぶ)から名づけられました。

Python

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

0グッド

0クリップ

投稿2021/06/28 15:28

編集2021/06/30 14:47

前提・実現したいこと

データファイルから各記事のタイトルと本文を取り出す。
MeCabにより名詞を抽出する。
それのTF-IDFを計算する。

上記のことを実行したいのですが、下のソースコードを実行すると、名詞までは抽出できるのですが、TF-IDFの計算はできません。 このエラーなにを表しているのでしょうか。

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

Traceback (most recent call last): File "enshu12.2.py", line 79, in <module> wikitfidfs = calculate_tfidf(wikititles,wikidocuments) File "enshu12.2.py", line 56, in calculate_tfidf vecs = vectorizer.fit_transform(npdocs) File "C:\Users\riki_\anaconda3\lib\site-packages\sklearn\feature_extraction\text.py", line 1841, in fit_transform X = super().fit_transform(raw_documents) File "C:\Users\riki_\anaconda3\lib\site-packages\sklearn\feature_extraction\text.py", line 1198, in fit_transform vocabulary, X = self._count_vocab(raw_documents, File "C:\Users\riki_\anaconda3\lib\site-packages\sklearn\feature_extraction\text.py", line 1129, in _count_vocab raise ValueError("empty vocabulary; perhaps the documents only" ValueError: empty vocabulary; perhaps the documents only contain stop words

該当のソースコード

# wikiデータのTF-IDFを計算する。 import MeCab import re import numpy as np from sklearn.feature_extraction.text import TfidfVectorizer tagger = MeCab.Tagger() #関数定義:wikiデータを読み込む def read_wikidata(wikifilename): wikifile = open(wikifilename, "r", encoding="utf_8") tagger = MeCab.Tagger('-Ochasen') buf = [] docdone = False titles = [] documents = [] doccnt = 0 #ファイルを読み込んでから1行ずつ処理する for line in wikifile: if line.startswith('<doc '): buf = [] docdone = False m = re.search('title=.*>', line) title = m.group().replace('title="', '') title = title.replace('">', '').strip() print("文書番号=", doccnt, "タイトル=", title) elif line.startswith('</doc>'): doc = ''.join(buf) docdone = True doccnt += 1 else: if len(line) != 0: buf.append(line) words = "" if docdone == True: node = tagger.parseToNode(doc) while node: node_features = node.feature.split(".") if node_features[0] == "名詞" and (node_features[1] == "一般" or node_features[1] == "固有名詞"): words=words + " " + node.surface node = node.next if len(words) >= 100: titles.append(title) documents.append(words) return(titles, documents) #関数定義:TF-IDFを計算 def calculate_tfidf(titles,docs): #オブジェクト生成 npdocs = np.array(docs) vectorizer = TfidfVectorizer(norm=None, smooth_idf=False) vecs = vectorizer.fit_transform(npdocs) #単語帳を表示 terms = vectorizer.get_feature_names() print("単語文書行列 (TF-IDF)=") print("単語", "\t", end='') for term in terms: print("%6s " % term, end='') print() #TF-IDFを計算 tfidfs = vecs.toarray() for n, tfidf in enumerate(tfidfs): print("文書番号=", n, "タイトル=", titles[n], ">>>", end='') for t in tfidf: if (t != 0.0000): print("%10.4f" % t, end='') print() return tfidfs #メイン処理 wikifilename = "./wikidata/wikiarticles/AA/wiki_00" wikititles, wikidocuments = read_wikidata(wikifilename) wikitfidfs = calculate_tfidf(wikititles,wikidocuments)

試したこと

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

windows10でVisual Studio Code を動かしています。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問