Traceback (most recent call last): File "coappear.py", line 70, in <module> top_words = list(a.analyze(filterdText))[:20] File "/usr/local/lib/python3.5/dist-packages/janome/analyzer.py", line 105, in analyze tokens = tfilter.filter(tokens) File "/usr/local/lib/python3.5/dist-packages/janome/tokenfilter.py", line 29, in filter return self.apply(tokens) File "/usr/local/lib/python3.5/dist-packages/janome/tokenfilter.py", line 179, in apply for token in tokens: File "/usr/local/lib/python3.5/dist-packages/janome/tokenfilter.py", line 99, in apply for token in tokens: File "/usr/local/lib/python3.5/dist-packages/janome/tokenizer.py", line 201, in __tokenize_stream tokens, pos = self.__tokenize_partial(text[processed:], wakati, baseform_unk) File "/usr/local/lib/python3.5/dist-packages/janome/tokenizer.py", line 253, in __tokenize_partial lattice.add(Node(dummy_dict_entry, NodeType.UNKNOWN)) File "/usr/local/lib/python3.5/dist-packages/janome/lattice.py", line 144, in add self.enodes[self.p + node_len].append(node) IndexError: list index out of range```
list index out of range
というエラーは、リスト(配列)に対して存在しないインデックを指定している」という意味。
原因は複数あるけど、janomeにほかの言語が入り込んでしまうことが原因らしく、以下のコードにフィルターしたいテキストを引数に入れると、きれいになおしてくれるらしい。
def filterText(text): """ :param text: str :rtype : str """ # アルファベットと半角英数と記号と改行とタブを排除 text = re.sub(r'[a-zA-Z0-9¥"¥.¥,¥@]+', '', text) text = re.sub(r'[!"“#$%&()\*\+\-\.,\/:;<=>?@\[\\\]^_`{|}~]', '', text) text = re.sub(r'[\n|\r|\t]', '', text) # 日本語以外の文字を排除(韓国語とか中国語とかヘブライ語とか) jp_chartype_tokenizer = nltk.RegexpTokenizer(u'([ぁ-んー]+|[ァ-ンー]+|[\u4e00-\u9FFF]+|[ぁ-んァ-ンー\u4e00-\u9FFF]+)') text = "".join(jp_chartype_tokenizer.tokenize(text)) return text
参考)
「日本語以外の文字と記号を排除し日本語の平文コーパスを作成する呪文」 https://qiita.com/haminiku/items/5907cb81325083cb36c7