質問編集履歴

1

質問をわかりやすくしました.

2022/07/05 11:26

投稿

studyprg
studyprg

スコア57

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
- ```get_text_byte.txt
23
+ ```idf_test.py
21
24
  # -*- coding: utf-8 -*-
22
25
  import MeCab
23
-
26
+ from tqdm import tqdm
24
- from gensim.models.doc2vec import Doc2Vec
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
- removeW = re.compile(
41
+ removeW = re.compile(
38
- '[!"#$%&\'\\\\()*+,-./:;<=>?@[\\]^_`{|}~「」〔〕“”〈〉『』【】&*・()$#@。、?!`+¥% ]')#とりあえず記号の除外
42
+ '[!"#$%&\'\\\\()*+,-./:;<=>?@[\\]^_`{|}~「」〔〕“”〈〉『』【】&*・()$#@。、?!`+¥% ]')
39
43
 
40
44
 
41
45
  text = removeW.sub('', text)
42
- print("text clean complite!")
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
- l_size2 = len(nouns2)
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, "\t", a+1, "回目")
89
+ print("単語:", w1,")", a+1, "回目")
85
- b = 0
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