teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2018/08/07 07:54

投稿

quickquip
quickquip

スコア11314

answer CHANGED
@@ -6,7 +6,7 @@
6
6
  ----
7
7
 
8
8
  入力が半角なのがまずいので、適当なコード(Web検索で拾ってくればいいでしょう)で全角にしましょう。
9
- ipadicには半角記号が辞書に含まれてないのです。
9
+ ipadicには半角記号が辞書に含まれてないため、名詞扱いになるのです。
10
10
 
11
11
 
12
12
  ```shell

1

追記

2018/08/07 07:54

投稿

quickquip
quickquip

スコア11314

answer CHANGED
@@ -1,4 +1,61 @@
1
1
  ```
2
2
  if node.stat != 0:
3
3
  ```
4
- として、**未知語を取り除く**処理をいれて、自分でわざわざ取り除いてますよね。
4
+ として、**未知語を取り除く**処理をいれて、自分でわざわざ取り除いてますよね。
5
+
6
+ ----
7
+
8
+ 入力が半角なのがまずいので、適当なコード(Web検索で拾ってくればいいでしょう)で全角にしましょう。
9
+ ipadicには半角記号が辞書に含まれてないのです。
10
+
11
+
12
+ ```shell
13
+ % echo "ドライ・アムネシア・バラ(切花)" | mecab
14
+ ドライ・アムネシア・バラ 名詞,一般,*,*,*,*,*
15
+ ( 記号,括弧開,*,*,*,*,(,(,(
16
+ 切花 名詞,一般,*,*,*,*,切花,キリバナ,キリバナ
17
+ ) 記号,括弧閉,*,*,*,*,),),)
18
+ EOS
19
+ % echo "ドライ・アムネシア・バラ(切花)" | mecab
20
+ ドライ・アムネシア・バラ 名詞,一般,*,*,*,*,*
21
+ ( 名詞,サ変接続,*,*,*,*,*
22
+ 切花 名詞,一般,*,*,*,*,切花,キリバナ,キリバナ
23
+ ) 名詞,サ変接続,*,*,*,*,*
24
+ EOS
25
+ ```
26
+
27
+ その上で、`node.stat`を見ないで、品詞が名詞のものを拾えばいいかと思います。
28
+ あと用途によるでしょうが、私ならもうちょっと品詞細目を絞りますね。
29
+
30
+ ```Python
31
+ STOP_POS = {
32
+ ('名詞', '副詞可能', '*'), # これは微妙?
33
+ ('名詞', '非自立', '副詞可能'),
34
+ ('名詞', '非自立', '一般'),
35
+ ('名詞', '接尾', '副詞可能'),
36
+ ('名詞', '接尾', '助数詞'),
37
+ ('名詞', '数', '*'),
38
+ }
39
+
40
+
41
+ def han2zen(text):
42
+ # なんかてきとうな全角化関数にしてください
43
+ return text
44
+
45
+
46
+ def extractKeyword(text):
47
+ tagger = MeCab.Tagger('-Ochasen')
48
+ tagger.parse('')
49
+ node = tagger.parseToNode(han2zen(text))
50
+ keywords = []
51
+ while node:
52
+ features = tuple(node.feature.split(","))
53
+ if features[0] == u"名詞" and features[:3] not in STOP_POS:
54
+ keywords.append(node.surface)
55
+ elif features[0] == u"形容詞" and features[1] == u"自立":
56
+ keywords.append(node.surface)
57
+ elif features[0] == u"動詞" and features[1] == u"自立":
58
+ keywords.append(node.surface)
59
+ node = node.next
60
+ return keywords
61
+ ```