質問編集履歴
1
質問をわかりやすくしました.
test
CHANGED
File without changes
|
test
CHANGED
@@ -3,48 +3,52 @@
|
|
3
3
|
自然言語処理について勉強しています。
|
4
4
|
Wikipediaのxmlデータからテキストを抜き出して処理をしようと思ってます。
|
5
5
|
抜き出したテキストは用意できましたが,テキスト中にリンクやタグ,数字などがあるので前処理としてテキストクリーニングしてテキストから日本語の名詞部分のみを抽出したいのですが,指定したい正規表現がわからなくて困ってます.
|
6
|
-
調査時にMeCabに通すときに日本語文字列の名刺だけピックアップできればいいのではないかなとも思いました.
|
6
|
+
(*調査時にMeCabに通すときに日本語文字列の名刺だけピックアップできればいいのではないかなとも思いました.)
|
7
7
|
|
8
|
-
取り除きたいものは(re.subで’’に置き換えたい)
|
8
|
+
**取り除きたいものは(re.subで’’に置き換えたい)
|
9
9
|
0. tag(<title>,<id>,<text>など)
|
10
10
|
1.http〜などのリンク部分(英語も全て)
|
11
11
|
2.無駄なスペース
|
12
|
+
3.数字(5や1994など)**
|
12
13
|
プログラミングはあまり得意ではないです。
|
14
|
+
日本語の名詞だけを抜き出した後,重複単語を除いた単語リストを作成し,word2vecで単語間の類似度を算出したリストを生成したいです.
|
13
15
|
|
14
16
|
実行環境
|
15
17
|
---
|
16
18
|
**Macbook pro(2017)
|
17
19
|
OS:11.6.7**
|
18
20
|
|
19
|
-
以下にソースコードを貼り付けます。
|
21
|
+
以下に現在のソースコードを貼り付けます。
|
22
|
+
|
20
|
-
```
|
23
|
+
```idf_test.py
|
21
24
|
# -*- coding: utf-8 -*-
|
22
25
|
import MeCab
|
23
|
-
|
26
|
+
from tqdm import tqdm
|
24
|
-
|
27
|
+
from gensim.models.doc2vec import Doc2Vec
|
25
28
|
import pandas as pd
|
26
29
|
import math
|
27
30
|
import re
|
28
31
|
print("モデルロード")
|
29
32
|
model = Doc2Vec.load("jawiki.doc2vec.dbow300d.model")
|
30
33
|
myfile = open('history_0text.txt')
|
31
|
-
# 以下に抽出したい文text
|
34
|
+
# 以下に抽出したい文textここをファイルを読み込むように変更
|
35
|
+
|
32
36
|
text = myfile.read()
|
33
37
|
m = MeCab.Tagger("-Ochasen")
|
34
38
|
mp = MeCab.Tagger()
|
35
39
|
# m.parse("")
|
36
40
|
print("処理開始")
|
37
|
-
|
41
|
+
removeW = re.compile(
|
38
|
-
'[!"#$%&\'\\\\()*+,-./:;<=>?@[\\]^_`{|}~「」〔〕“”〈〉『』【】&*・()$#@。、?!`+¥% ]')
|
42
|
+
'[!"#$%&\'\\\\()*+,-./:;<=>?@[\\]^_`{|}~「」〔〕“”〈〉『』【】&*・()$#@。、?!`+¥% ]')
|
39
43
|
|
40
44
|
|
41
45
|
text = removeW.sub('', text)
|
42
|
-
print("text cle
|
46
|
+
print("text clesn complite!")
|
43
47
|
# print(text)
|
44
48
|
# f=open('simw_d2v_2.txt',"w")
|
45
49
|
#paragraf =mp.parse(text).split('\n')
|
46
50
|
nouns = [line.split()[0] for line in m.parse(text).splitlines()
|
47
|
-
if "名詞" in line.split()[-1]] # ここをへんこうする
|
51
|
+
if "名詞" in line.split()[-1]] # ここをへんこうする
|
48
52
|
for str in nouns:
|
49
53
|
str.split()
|
50
54
|
|
@@ -52,7 +56,7 @@
|
|
52
56
|
# print(nouns)#中身の確認
|
53
57
|
a = 0
|
54
58
|
l_size = len(nouns)
|
55
|
-
|
59
|
+
b = 0
|
56
60
|
simd = {}
|
57
61
|
simt = []
|
58
62
|
wsimx = {}
|
@@ -65,26 +69,28 @@
|
|
65
69
|
for x in nouns:
|
66
70
|
if not x in nouns2:
|
67
71
|
nouns2.append(x)
|
72
|
+
|
68
|
-
|
73
|
+
l_size2 = len(nouns2)
|
69
74
|
# print(nouns2)
|
70
75
|
# print(l_size2,"単語")
|
71
76
|
listn = [[None]*l_size2 for i in range(l_size2)]
|
72
77
|
# 辞書の作成key=nouns2,value=none
|
73
|
-
l_size3 = len(listn)
|
74
78
|
for x in nouns2:
|
75
79
|
simd.setdefault(x, [])
|
76
80
|
|
77
|
-
# 処理 本体
|
81
|
+
# 処理 本体
|
78
82
|
|
79
83
|
print("計算中")
|
80
84
|
for a in range(0, l_size2):
|
81
|
-
|
85
|
+
l_size2 = len(nouns2)
|
86
|
+
print(l_size2)
|
82
87
|
w1 = nouns2[a]
|
83
88
|
# simw=[for i in range(l_size2)]
|
84
|
-
print("単語:", w1,
|
89
|
+
print("単語:(", w1,")", a+1, "回目")
|
85
|
-
|
90
|
+
|
86
91
|
# simw[a].append(w1)
|
87
92
|
for b in range(0, l_size2):
|
93
|
+
print(b)
|
88
94
|
w2 = nouns2[b]
|
89
95
|
if w2 not in model.docvecs:
|
90
96
|
eject.append(w2)
|
@@ -133,54 +139,8 @@
|
|
133
139
|
print("単語からid辞書", wsimx)
|
134
140
|
print("idから出現個数リスト(値は0)", wsimid)
|
135
141
|
|
136
|
-
print("tf作成")
|
137
|
-
for y in nouns:
|
138
|
-
c = nouns.count(y)
|
139
|
-
xid = wsimx.get(y)
|
140
|
-
print(y, ":id=", xid, "出現回数:", c)
|
141
|
-
samw += c
|
142
|
-
wsimid[xid] = wsimid[xid]+c
|
143
142
|
|
144
143
|
|
145
|
-
print("idから出現個数リスト(更新版)", wsimid)
|
146
|
-
|
147
|
-
list_tf = []
|
148
|
-
|
149
|
-
for tfx in wsimx.keys():
|
150
|
-
yid = wsimx[tfx]
|
151
|
-
tf = wsimid[yid]/samw
|
152
|
-
list_tf.append(tf)
|
153
|
-
print(tfx, "のtf:", tf)
|
154
|
-
|
155
|
-
|
156
|
-
# print(list_tf)
|
157
|
-
|
158
|
-
print("idf作成")
|
159
|
-
list_idf = []
|
160
|
-
for tfx in wsimx.keys():
|
161
|
-
yid = wsimx[tfx]
|
162
|
-
idf = 1/wsimid[yid]
|
163
|
-
idf = math.log(idf)
|
164
|
-
list_idf.append(idf)
|
165
|
-
print(tfx, "のidf:", idf)
|
166
|
-
|
167
|
-
|
168
|
-
tf_size = len(list_tf)
|
169
|
-
print("tfxidf作成")
|
170
|
-
list_tfidf = []
|
171
|
-
for v in range(tf_size):
|
172
|
-
tfidf = list_tf[v]*list_idf[v]
|
173
|
-
list_tfidf.append(tfidf)
|
174
|
-
#listv = simd.get(v)
|
175
|
-
|
176
|
-
# print(v,listv)
|
177
|
-
print(v, ":", tfidf)
|
178
|
-
|
179
|
-
"""
|
180
|
-
手付かず
|
181
|
-
#print(paragraf)
|
182
|
-
|
183
|
-
"""
|
184
144
|
|
185
145
|
```
|
186
146
|
|