質問編集履歴
10
追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -18,19 +18,20 @@
|
|
18
18
|
@hayataka2049さんの回答により原因の判明と分かち書きが出来ました。
|
19
19
|
```python
|
20
20
|
import MeCab
|
21
|
+
import codecs
|
22
|
+
import ast
|
21
23
|
|
22
24
|
tagger = MeCab.Tagger() # mecab標準辞書でオブジェクト生成
|
23
25
|
|
26
|
+
f = open('lines.txt', 'r')
|
27
|
+
reader = f.read()
|
28
|
+
reader = reader.replace("\n", "|")
|
29
|
+
f.close()
|
24
30
|
|
25
|
-
with open('lines.txt', 'r') as f:
|
26
|
-
while True:
|
27
|
-
reader = f.read()
|
28
|
-
if not reader: break
|
29
|
-
result = []
|
30
|
-
|
31
|
+
node = tagger.parseToNode(reader)
|
32
|
+
result = [reader]
|
31
33
|
|
32
34
|
while node:
|
33
|
-
#単語を取得
|
34
35
|
word = node.surface
|
35
36
|
#品詞を取得
|
36
37
|
pos = node.feature.split(",")[0]
|
@@ -53,8 +54,10 @@
|
|
53
54
|
そして、今後、txt列の品詞抽出を行いたい方がいらっしゃった場合にこの質問は役に立つと考えています。
|
54
55
|
|
55
56
|
実際の出力:
|
56
|
-
['今年', '梅雨', '遅い', '寝る', '時間', '
|
57
|
+
['今年の梅雨は遅い。|寝る時間よ。|・・・しなさい。|私に任せなさい。', '今年', '梅雨', '遅い', '|', '寝る', '時間', '|', ・・・ '|', '私', '任せる', 'なさる']
|
57
58
|
|
59
|
+
最初に'文章', 次に'品詞','品詞'が出力されます。
|
60
|
+
read()が全てを読み込むのは分かるのですが、pop()で出来ず、最初の要素をどうやって取り除くか。品詞部分が、\n、\tでは、区切られない問題に対処する必要があると考えています。
|
58
61
|
|
59
62
|
参考サイト:
|
60
63
|
MeCabの形態素解析で使うTagger、Nodeオブジェクトのプロパティとメソッド
|
9
追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -26,7 +26,6 @@
|
|
26
26
|
while True:
|
27
27
|
reader = f.read()
|
28
28
|
if not reader: break
|
29
|
-
reader = reader.rstrip("\n")
|
30
29
|
result = []
|
31
30
|
node = tagger.parseToNode(reader)
|
32
31
|
|
@@ -41,7 +40,7 @@
|
|
41
40
|
result.append(node.feature.split(",")[6])
|
42
41
|
#次の単語に進める
|
43
42
|
node = node.next
|
44
|
-
print(result)
|
43
|
+
print(result, file=codecs.open("haiku_wakati.txt", "w"))
|
45
44
|
```
|
46
45
|
|
47
46
|
期待する出力:
|
8
追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -23,12 +23,13 @@
|
|
23
23
|
|
24
24
|
|
25
25
|
with open('lines.txt', 'r') as f:
|
26
|
+
while True:
|
26
|
-
|
27
|
+
reader = f.read()
|
27
|
-
|
28
|
+
if not reader: break
|
29
|
+
reader = reader.rstrip("\n")
|
28
|
-
|
30
|
+
result = []
|
31
|
+
node = tagger.parseToNode(reader)
|
29
32
|
|
30
|
-
node = tagger.parseToNode(reader)
|
31
|
-
|
32
33
|
while node:
|
33
34
|
#単語を取得
|
34
35
|
word = node.surface
|
@@ -53,19 +54,9 @@
|
|
53
54
|
そして、今後、txt列の品詞抽出を行いたい方がいらっしゃった場合にこの質問は役に立つと考えています。
|
54
55
|
|
55
56
|
実際の出力:
|
56
|
-
[]
|
57
|
-
['今年']
|
58
|
-
['今年']
|
59
|
-
['今年', '梅雨']
|
60
|
-
['今年', '梅雨']
|
61
|
-
['今年', '梅雨', '遅い']
|
57
|
+
['今年', '梅雨', '遅い', '寝る', '時間', '手遅れ', ・・・'私', '任せる', 'なさる']
|
62
|
-
・・・
|
63
|
-
のようになっていますが、writelines()は全てつなげてしまうため、下記のようになってしまうと考えました。
|
64
|
-
しかし、write()は、リストを保存できないため、使えません。
|
65
58
|
|
66
|
-
今年今年今年梅雨今年梅雨今年梅雨遅い今年梅雨遅い今年梅雨遅い寝る寝る・・・
|
67
59
|
|
68
|
-
|
69
60
|
参考サイト:
|
70
61
|
MeCabの形態素解析で使うTagger、Nodeオブジェクトのプロパティとメソッド
|
71
62
|
[https://takaxtech.com/2018/11/03/article271/](https://takaxtech.com/2018/11/03/article271/)
|
7
補足
title
CHANGED
File without changes
|
body
CHANGED
@@ -15,7 +15,7 @@
|
|
15
15
|
```
|
16
16
|
|
17
17
|
上記のスクリプトで分かち書きされると考えていますが、入力がそのまま出力されます。
|
18
|
-
@hayataka2049さんの回答により原因と分かち書き出来ました。
|
18
|
+
@hayataka2049さんの回答により原因の判明と分かち書きが出来ました。
|
19
19
|
```python
|
20
20
|
import MeCab
|
21
21
|
|
@@ -50,7 +50,7 @@
|
|
50
50
|
例えば、俳句の場合、
|
51
51
|
夏 + 梅雨 + 鯉 -(翻訳)-> 鯉 こく 梅雨 傘立 あふれ(分かち書き)
|
52
52
|
また、[]や''はreplce()で簡単に除去できます。
|
53
|
-
そして、今後、txt列の品詞抽出を行いたい方がいた場合にこの質問は役に立つと考えています。
|
53
|
+
そして、今後、txt列の品詞抽出を行いたい方がいらっしゃった場合にこの質問は役に立つと考えています。
|
54
54
|
|
55
55
|
実際の出力:
|
56
56
|
[]
|
6
追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -50,6 +50,7 @@
|
|
50
50
|
例えば、俳句の場合、
|
51
51
|
夏 + 梅雨 + 鯉 -(翻訳)-> 鯉 こく 梅雨 傘立 あふれ(分かち書き)
|
52
52
|
また、[]や''はreplce()で簡単に除去できます。
|
53
|
+
そして、今後、txt列の品詞抽出を行いたい方がいた場合にこの質問は役に立つと考えています。
|
53
54
|
|
54
55
|
実際の出力:
|
55
56
|
[]
|
@@ -64,6 +65,7 @@
|
|
64
65
|
|
65
66
|
今年今年今年梅雨今年梅雨今年梅雨遅い今年梅雨遅い今年梅雨遅い寝る寝る・・・
|
66
67
|
|
68
|
+
|
67
69
|
参考サイト:
|
68
70
|
MeCabの形態素解析で使うTagger、Nodeオブジェクトのプロパティとメソッド
|
69
71
|
[https://takaxtech.com/2018/11/03/article271/](https://takaxtech.com/2018/11/03/article271/)
|
5
追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -14,53 +14,56 @@
|
|
14
14
|
write_file.write(output)
|
15
15
|
```
|
16
16
|
|
17
|
-
上記のスクリプトで分かち書きされると考えていますが、入力がそのまま出力されます。
|
17
|
+
上記のスクリプトで分かち書きされると考えていますが、入力がそのまま出力されます。
|
18
|
+
@hayataka2049さんの回答により原因と分かち書き出来ました。
|
18
19
|
```python
|
19
20
|
import MeCab
|
20
21
|
|
21
22
|
tagger = MeCab.Tagger() # mecab標準辞書でオブジェクト生成
|
22
23
|
|
23
|
-
f = open("lines.txt","r")
|
24
|
-
read_text = f.readlines()
|
25
24
|
|
25
|
+
with open('lines.txt', 'r') as f:
|
26
|
-
|
26
|
+
reader= f.readline()
|
27
|
-
|
27
|
+
f.close()
|
28
|
-
node = tagger.parseToNode(text) # 形態素解析の結果をリストで取得、単語ごとにリストの要素に入れる
|
29
28
|
result = []
|
30
|
-
while node is not None: # 助詞や助動詞は拾わない
|
31
|
-
# Node.featureのフォーマット:品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音
|
32
|
-
hinshi = node.feature.split(",")[0] # 品詞情報取得
|
33
|
-
if hinshi in ["名詞"]:
|
34
|
-
result.append(node.surface) # 表層形の取得、単語の文字が入ってる
|
35
|
-
elif hinshi in["動詞","形容詞"]:
|
36
|
-
result.append(node.feature.split(",")[6]) # 形態素情報から原形情報取得
|
37
|
-
node = node.next
|
38
|
-
with open("hinshi_lines.txt", mode="a") as write_file:
|
39
|
-
write_file.writelines(result)
|
40
|
-
print(result)
|
41
29
|
|
30
|
+
node = tagger.parseToNode(reader)
|
31
|
+
|
32
|
+
while node:
|
33
|
+
#単語を取得
|
34
|
+
word = node.surface
|
35
|
+
#品詞を取得
|
36
|
+
pos = node.feature.split(",")[0]
|
37
|
+
if pos in ["名詞"]:
|
38
|
+
result.append(node.surface)
|
39
|
+
elif pos in["動詞","形容詞"]:
|
40
|
+
result.append(node.feature.split(",")[6])
|
41
|
+
#次の単語に進める
|
42
|
+
node = node.next
|
43
|
+
print(result)
|
42
44
|
```
|
43
45
|
|
44
46
|
期待する出力:
|
45
|
-
|
47
|
+
['今年', '梅雨', '遅い']
|
46
|
-
|
48
|
+
['寝る', '時間']
|
49
|
+
この形式にする理由は、random.chices()でランダムに要素を抽出し、翻訳生成用データセットを作るためです。
|
50
|
+
例えば、俳句の場合、
|
51
|
+
夏 + 梅雨 + 鯉 -(翻訳)-> 鯉 こく 梅雨 傘立 あふれ(分かち書き)
|
52
|
+
また、[]や''はreplce()で簡単に除去できます。
|
47
53
|
|
48
54
|
実際の出力:
|
49
|
-
|
50
55
|
[]
|
51
56
|
['今年']
|
52
57
|
['今年']
|
53
58
|
['今年', '梅雨']
|
54
59
|
['今年', '梅雨']
|
55
60
|
['今年', '梅雨', '遅い']
|
56
|
-
|
61
|
+
・・・
|
57
|
-
['今年', '梅雨', '遅い']
|
58
62
|
のようになっていますが、writelines()は全てつなげてしまうため、下記のようになってしまうと考えました。
|
59
63
|
しかし、write()は、リストを保存できないため、使えません。
|
60
64
|
|
61
|
-
今年今年今年梅雨今年梅雨今年梅雨遅い今年梅雨遅い今年梅雨遅い寝る寝る
|
65
|
+
今年今年今年梅雨今年梅雨今年梅雨遅い今年梅雨遅い今年梅雨遅い寝る寝る・・・
|
62
66
|
|
63
|
-
|
64
67
|
参考サイト:
|
65
68
|
MeCabの形態素解析で使うTagger、Nodeオブジェクトのプロパティとメソッド
|
66
69
|
[https://takaxtech.com/2018/11/03/article271/](https://takaxtech.com/2018/11/03/article271/)
|
4
追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
txtを一行ずつ分かち書きしてtxtに保存。
|
2
|
-
また、txtを一行ずつ"形容詞"、"名詞"、"動詞"を抽出したいと考えています。
|
2
|
+
また、txtを一行ずつ"形容詞"、"名詞"、"動詞"を抽出、保存したいと考えています。
|
3
3
|
```python
|
4
4
|
import MeCab
|
5
5
|
|
3
追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -21,7 +21,7 @@
|
|
21
21
|
tagger = MeCab.Tagger() # mecab標準辞書でオブジェクト生成
|
22
22
|
|
23
23
|
f = open("lines.txt","r")
|
24
|
-
read_text = f.
|
24
|
+
read_text = f.readlines()
|
25
25
|
|
26
26
|
for text in read_text:
|
27
27
|
tagger.parse("")
|
@@ -37,6 +37,7 @@
|
|
37
37
|
node = node.next
|
38
38
|
with open("hinshi_lines.txt", mode="a") as write_file:
|
39
39
|
write_file.writelines(result)
|
40
|
+
print(result)
|
40
41
|
|
41
42
|
```
|
42
43
|
|
@@ -45,8 +46,21 @@
|
|
45
46
|
寝る時間よ。-> ['寝る', '時間']
|
46
47
|
|
47
48
|
実際の出力:
|
48
|
-
今今年年梅梅雨雨遅い遅いいるいる
|
49
49
|
|
50
|
+
[]
|
51
|
+
['今年']
|
52
|
+
['今年']
|
53
|
+
['今年', '梅雨']
|
54
|
+
['今年', '梅雨']
|
55
|
+
['今年', '梅雨', '遅い']
|
56
|
+
['今年', '梅雨', '遅い']
|
57
|
+
['今年', '梅雨', '遅い']
|
58
|
+
のようになっていますが、writelines()は全てつなげてしまうため、下記のようになってしまうと考えました。
|
59
|
+
しかし、write()は、リストを保存できないため、使えません。
|
60
|
+
|
61
|
+
今年今年今年梅雨今年梅雨今年梅雨遅い今年梅雨遅い今年梅雨遅い寝る寝る時間寝る時間寝る時間寝る時間手遅れ手遅れ手遅れ手遅れ嘘嘘嘘付く嘘付くの嘘付くの嘘付くの悪い嘘付くの悪いこと嘘付くの悪いこと嘘付くの悪いこと嘘付くの悪いこと寝る寝る時間寝る時間寝る時間寝る時間寝る時間右側右側通行右側通行右側通行する右側通行するなさる右側通行するなさる右側通行するなさる私私私任せる私任せるなさる私任せるなさる私任せるなさる
|
62
|
+
|
63
|
+
|
50
64
|
参考サイト:
|
51
65
|
MeCabの形態素解析で使うTagger、Nodeオブジェクトのプロパティとメソッド
|
52
66
|
[https://takaxtech.com/2018/11/03/article271/](https://takaxtech.com/2018/11/03/article271/)
|
2
タグの追加
title
CHANGED
File without changes
|
body
CHANGED
File without changes
|
1
スクリプトの改良
title
CHANGED
File without changes
|
body
CHANGED
@@ -25,28 +25,27 @@
|
|
25
25
|
|
26
26
|
for text in read_text:
|
27
27
|
tagger.parse("")
|
28
|
-
node = tagger.parseToNode(text) # 形態素解析の結果をリストで取得、単語ごとにリストの要素に入れ
|
28
|
+
node = tagger.parseToNode(text) # 形態素解析の結果をリストで取得、単語ごとにリストの要素に入れる
|
29
29
|
result = []
|
30
|
+
while node is not None: # 助詞や助動詞は拾わない
|
31
|
+
# Node.featureのフォーマット:品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音
|
32
|
+
hinshi = node.feature.split(",")[0] # 品詞情報取得
|
33
|
+
if hinshi in ["名詞"]:
|
34
|
+
result.append(node.surface) # 表層形の取得、単語の文字が入ってる
|
35
|
+
elif hinshi in["動詞","形容詞"]:
|
36
|
+
result.append(node.feature.split(",")[6]) # 形態素情報から原形情報取得
|
37
|
+
node = node.next
|
38
|
+
with open("hinshi_lines.txt", mode="a") as write_file:
|
39
|
+
write_file.writelines(result)
|
30
40
|
|
31
|
-
while node is not None: # 助詞や助動詞を除外する。
|
32
|
-
# Node.featureのフォーマット:品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音
|
33
|
-
hinshi = node.feature.split(",")[0] # 品詞情報取得。
|
34
|
-
if hinshi in ["名詞"]:
|
35
|
-
result.append(node.surface) # 表層形の取得、単語の文字が入る。
|
36
|
-
elif hinshi in["動詞","形容詞"]:
|
37
|
-
result.append(node.feature.split(",")[6]) # 形態素情報から原形情報取得。
|
38
|
-
node = node.next
|
39
|
-
with open("hinsi_lines.txt", mode="a") as write_file:
|
40
|
-
write_file.writelines(result) # writelines()はリストを書き込める。
|
41
|
-
|
42
|
-
print(result)
|
43
41
|
```
|
44
42
|
|
45
43
|
期待する出力:
|
46
44
|
今年の梅雨は遅い。-> ['今年', '梅雨', '遅い']
|
47
45
|
寝る時間よ。-> ['寝る', '時間']
|
48
46
|
|
47
|
+
実際の出力:
|
49
|
-
|
48
|
+
今今年年梅梅雨雨遅い遅いいるいる
|
50
49
|
|
51
50
|
参考サイト:
|
52
51
|
MeCabの形態素解析で使うTagger、Nodeオブジェクトのプロパティとメソッド
|