#!/usr/bin/env python
# -*- coding:utf-8 -*-

# 正規表現で打たれた文字について，各ファイルから探索しヒットした数を表示する

#import os # osモジュールのインポート
import glob
import re # 正規表現検索
import codecs
import csv
from webdata import Webdata # 自作クラス（名前，検索後の個数）

# ----------- 関数群 -----------
# htmlテキストからbody内の本文のみを返す
def htmlbody(html):
	body = re.split(u'<body>|<BODY>', html)[-1]
	body = re.split(u'</body>|</BODY>', body)[0]
	return body

# htmlテキストをpythonのunicode型にデコードする
# 戻り値は変換されたテキストとエンコード方式のタプル
def conv_encoding(data):
	lookup = ('utf_8', 'euc_jp', 'euc_jis_2004', 'euc_jisx0213',
			  'shift_jis', 'shift_jis_2004','shift_jisx0213',
			  'iso2022jp', 'iso2022_jp_1', 'iso2022_jp_2', 'iso2022_jp_3',
			  'iso2022_jp_ext','latin_1', 'ascii')
	encode = None
	for encoding in lookup:
		try:
			data = data.decode(encoding)
			encode = encoding
			break
		except:
			pass
	if isinstance(data, unicode):
		return data,encode
	else:
		raise LookupError


def count_word(words,re_word):
	i = 0
	number = 0
	while i >= 0:
		m = re_word.search(words, i)
		if m:	# マッチする組み合わせが文中に存在すれば
			i = m.start()+1		# 検索開始位置を見つけた位置から1ずらす（同じところでカウントしない）
			number += 1
		else:
			break
	return number
# -----------------------------



search_word = raw_input('Enter search word: ')
re_word = re.compile(search_word)

test_list = []

files = glob.glob('../web/*.html')

for file in files:
	f = open(file)
	html = f.read()
	bodytext, encode = conv_encoding(html)
	bodytext = htmlbody(bodytext)
	number = count_word(bodytext,re_word)
	if number!=0:
		filename = file.rsplit('/',1)[-1] #右から1度だけスプリットして，ファイル名（一番右）だけを返す
		strnum = len(bodytext)
		w = Webdata(filename, number, strnum)
		test_list.append(w)
	f.close()


sorted_lists = sorted(test_list,key=lambda x: float(x.hitnum)/x.strnum, reverse=True)

csv_File = codecs.open("./pagelank.csv","w","utf_8")
writer = csv.writer(csv_File)
csv_header = ("html", search_word, "strnum")
writer.writerow(csv_header)

for i in sorted_lists:
	i.showinfo()
	row = i.simple()
	writer.writerow(row)
@@ -1436,63 +1436,9 @@
 xt)%0A
-%09number = count_word(bodytext,re_word)%0A%09if number!=0:%0A%09
+%0A
 %09fil
@@ -1505,33 +1505,93 @@
 %E8%BF%94%E3%81%99%0A%09
-%09strnum = len(bodytext
+number = count_word(bodytext,re_word)%0A%09strnum = count_word(bodytext,re.compile(%22 %22)
 )%0A
-%09
 %09w =
@@ -1625,17 +1625,16 @@
 strnum)%0A
-%09
 %09test_li
@@ -1646,16 +1646,17 @@
 pend(w)%0A
+%0A
 %09f.close
@@ -1663,94 +1663,8 @@
 ()%0A%0A
-%0Asorted_lists = sorted(test_list,key=lambda x: float(x.hitnum)/x.strnum, reverse=True)
 %0A%0Acs
@@ -1818,16 +1818,17 @@
 eader)%0A%0A
+%0A
 for i in
@@ -1832,35 +1832,18 @@
  in 
-sorted_lists:%0A%09i.showinfo()
+test_list:
 %0A%09ro
@@ -1878,8 +1878,133 @@
 row(row)
+%0A%0Asorted_lists = sorted(test_list,key=lambda x: float(x.hitnum)/x.strnum, reverse=True)%0Afor i in sorted_lists:%0A%09i.showinfo()%0A

upgrade pagelank