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

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

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

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

Python

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

自然言語処理

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

Q&A

解決済

1回答

1848閲覧

形態素解析の結果が表示されない

farinelli

総合スコア61

Mecab

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

Python

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

自然言語処理

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

0グッド

1クリップ

投稿2019/10/16 04:03

編集2019/10/16 08:04

テキストファイルから特定の文字列を除去した後,Mecab-python3を用いた形態素解析によりストップワードを含まない2文字以上の名詞を抽出,表示させたいと思っています.
しかし,名詞のセレクションの段階で以下のエラーが出てきました.("#該当箇所"の行です)

従来natto-pyを使っていたときでも同様の現象が飽きており,何か不適切な書き方をしてしまっているのか,あるいは不足している情報があるのか自分の知識では判断できない状況です.
この件に関する原因と解決策がご存知の方に是非ご教示頂きたいです.
宜しくお願いします.

テキスト

test.txt

1全ゲノム配列決定が容易になった結果,多くの新規遺伝子(タンパク質)の存在や機能を配列情報から予測することはかなり容易になった. 2とはいえ,どの生物種でも全遺伝子の1/3~1/2はその配列からだけでは機能を予測できない「機能未知タンパク質」をコードしている. 3生命現象の全体像を分子レベルから理解するためには,それら機能未知タンパク質の機能の解明も必要である. 4又,タンパク質配列のうち全くもって未知なものもあれば,多くの種で保存されている既知の機能部位を持つものもある. 5更に,タンパク質が持つ活性(分子機能)と細胞における働き(細胞内機能)は往々にして別の文脈で語られることが多く,これらを実験的に検証する系は未だ存在しない. 6本研究では,モデル生物である出芽酵母を用いて,関心のある機能未知タンパク質の機能部位の同定と機能解析をランダム変異導入法を用いて,安価かつ簡素に行う系を確立することを目的とする.

理想の出力結果

[[“ゲノム”], [“配列”], [“決定”], [“容易”], [“結果”], [“多く”], [“新規”], [“遺伝子”],,,]#途中省略

エラー

test.txt

1Traceback (most recent call last): 2 File "renshu2.py", line 64, in <module> 3 if w.feature.split(",")[0] == "名詞": 4AttributeError: 'str' object has no attribute 'feature'

コード

renshu.py

1import os 2import tweepy 3import redis 4from collections import Counter 5from collections import defaultdict 6import re 7import MeCab 8import codecs 9import sys 10from sklearn.feature_extraction.text import TfidfVectorizer 11import glob 12import numpy as np 13import urllib.request 14from gensim import corpora 15from itertools import chain 16 17mecab = MeCab.Tagger('-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd') 18 19#日本語ツイートを読み込む + 文書数を表示 20count = 0 21with codecs.open("protein.txt", "r", "utf-8") as f: 22 corpus = f.read() 23 #print(corpus) 24 25#テキストデータの行数を取得する 26num_lines = sum(1 for line in open("protein.txt")) 27#print(num_lines) 28 29#名詞の抽出と整形 30rm_list = ["RT","https","co"] 31 32#ストップワードの読み込み 33stop_words = [] 34path = 'stop_words.txt' 35with open(path) as g: 36 stop_words = g.readlines() 37#url, 返信, RT, 絵文字の除去 38corpus = re.sub(r"http\S+", "", corpus) 39corpus = re.sub(r"@(\w+) ", "", corpus) 40corpus = re.sub(r"(^RT.*)", "", corpus, flags=re.MULTILINE | re.DOTALL) 41emoji_pattern = re.compile("[" 42u"\U0001F600-\U0001F64F" 43u"\U0001F300-\U0001F5FF" 44u"\U0001F680-\U0001F6FF" 45u"\U0001F1E0-\U0001F1FF" 46"]+", flags=re.UNICODE) 47corpus = emoji_pattern.sub("", corpus) 48#texts = str(corpus) 49print(corpus) 50texts = mecab.parse(corpus) 51 52#名詞の抽出とスクリーニング 53docs = [] 54for txt in texts: 55 words = mecab.parse(txt) 56 doc = [] 57 58 for w in words: 59 if w.feature.split(",")[0] == "名詞":#該当箇所 60 if len(w.surface) >= 2: 61 if w.surface not in rm_list: 62 doc.append(w.surface) 63 #print(doc) 64 docs.append(doc) 65#本来の意味とは別だがcorpusに単語群を格納 66corpus = docs 67print(corpus)

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

iOS 10.15, Python 3.7.4, Atom

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

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

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

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

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

quickquip

2019/10/16 06:04 編集

このソースはインデントがおかしいのでエラーになるはずですけれども、動かしているコードを貼ってますか? コードの貼り間違えでないなら、このコードを動かしているつもりで別のコードを動かしているのではないでしょうか?
farinelli

2019/10/16 06:27

動かしているコードです.インデントエラーは出ていないですね. 後学のために,どの辺のインデントがどうおかしいのかご教授いただくことは可能でしょうか?
quickquip

2019/10/16 06:34

for w in words: の行の空白が1つ足りません。 HTMLの表示上の問題ですかね……?
farinelli

2019/10/16 07:25

tabで空けてるので表示上の問題だと思います.
guest

回答1

0

ベストアンサー

natto は Python 3.7.x での動作がイマイチ不安定です。書式が微妙に違うのですが、mecab-python3 を使うことをオススメします。

投稿2019/10/16 04:35

KoichiYasuoka

総合スコア15

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

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

farinelli

2019/10/16 07:25

有難うございます.やってみます.
KoichiYasuoka

2019/10/16 11:22

mecab-python3 の場合、MeCab.Tagger(option).parse(corpus) の結果かえってくるのは、あくまでstrで、配列とかObjectとかじゃありません。ですので、strを適宜splitした上で、必要な部分を取り出さなきゃダメです。
farinelli

2019/10/23 02:59

有難うございます. 返信が遅れ,大変失礼致しました.調べたら上手い事いきそうです.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問