テキストファイルから特定の文字列を除去した後,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
回答1件
あなたの回答
tips
プレビュー