前提・実現したいこと
ngramのプログラムを実行したところ、結果に不自然な点が生まれました。下に結果を載せますのでどなたか理由を教えていただけると幸いです。(カンマで区切っています)
(1)1行おきに結果が出ないところがある点
(2)空行が発生
なおJsonでURLファイルを作り実行しています。
発生している問題(3gramの場合)
, , 130867 , , 3515 , , 3132 名,古,屋 2219 , , 1912 0,0,0 1754 ,,0,0 1584 0,0, 1531 ぐ,る,な 1509 る,な,び 1508 0,0,円 1503 コ,ー,ス 1435 , , 1432 ,名, 1394 ニ,ュ,ー 1196 -,-,- 1186 名, ,3 1155 名, ,4 1155 名, ,5 1155 名, ,6 1155 名, ,7 1155 名, ,8 1155 名, ,9 1155 名, ,1 1155 名, ,2 1141 古,屋,駅 1118 メ,ニ,ュ 1038 0,円, 1011 ラ,ン,チ 947 1,名, 910 2,名, 910 3,名, 910 4,名, 910 5,名, 910 6,名, 910 7,名, 910 8,名, 910 9,名, 910 す,る, 898 す,。, 888 の,お,店 880 飲,み,放 865 み,放,題 865 ま,す,。 853 , , 853 ,名,古 847 0,名, 821 :,0,0 766 お,す,す 754 す,す,め 754 ス,ト,ラ 741 特,集, 739 あ,り, 736 レ,ス,ト 733 ト,ラ,ン 730 ネ,ッ,ト 723 ,ぐ,る 721 居,酒,屋 711 ポ,イ,ン 694 イ,ン,ト 694 :,3,0 640 見,る, 625 3,0, 613
該当のソースコード
python
1# coding: utf-8 2import sys 3import json 4import MeCab 5import urllib.request, urllib.error, urllib.parse 6from collections import defaultdict 7from operator import itemgetter 8from bs4 import BeautifulSoup 9from bs4 import NavigableString 10from bs4 import Comment, Declaration 11class Ngram(): 12 13 def __init__(self, N=3): 14 self.N = N 15 self.tagger = MeCab.Tagger("-Owakati") 16 #print (self.tagger) 17 18 def get(self, seq, ngram=None): 19 #seq = self.tagger.parse(text).split() 20 #print (seq) 21 if ngram is None: 22 ngram = [defaultdict(int) for x in range((self.N + 1))] 23 ngram[0] = None 24 25 for i in range(len(seq)): 26 for n in range(1, self.N + 1): 27 idx = i - n + 1 # check ngram is valid range 28 if idx >= 0: 29 key_words = [] 30 for j in range(idx, i+1): 31 key_words.append(seq[j]) 32 key = ','.join(key_words) 33 ngram[n][key] += 1 34 35 return ngram 36class HTMLParser(): 37 38 def get(self, url): 39 try: 40 c = urllib.request.urlopen(url) 41 except: 42 print("Could not open %s" % url) 43 return "" 44 45 soup = BeautifulSoup(c.read(), "lxml") 46 text = '\n'.join(self.__getNavigableStrings(soup)) 47 return text 48 49 def __getNavigableStrings(self, soup): 50 if isinstance(soup, NavigableString): 51 if type(soup) not in (Comment, Declaration) and soup.strip(): 52 yield soup 53 elif soup.name not in ('script', 'style'): 54 for c in soup.contents: 55 for g in self.__getNavigableStrings(c): 56 yield g 57if __name__ == "__main__": 58 59 f = open("urls.json", "r") 60 urls = json.load(f) 61 f.close() 62 print("Count of urls : " + str(len(urls))) 63 64 N = 10 65 hp = HTMLParser() 66 ng = Ngram(N) 67 68 ngram = None 69 for url in urls: 70 text = hp.get(url) 71 ngram = ng.get(text, ngram) 72 73 for n in range(1, (N + 1)): 74 f = open('outputs/{:02d}.tsv'.format(n), 'w') 75 out = "" 76 for k, v in sorted(list(ngram[n].items()), key=itemgetter(1), reverse=True): 77 out += "{}\t{}\n".format(k, v) 78 f.write(out) 79 f.close()

あなたの回答
tips
プレビュー