Webstemmerの文字コードが解決したと見せかけてしてなかったけど一応再度解決
前回の続き。タイトルがまどろっこしい。
extract.pyのオプションに'-c euc-jp'を入れて解決したと思いきや、日経の文字コードはUTF-8で、今度はこちらが文字化けることが発覚。どうも文字コードを指定すること自体が問題らしい。
どうしたら良いか分からず、思いつきで文字コード指定をとっぱらってみた。
#extract.py def main(): ... (debug, pat_threshold, diffscore_threshold, mainscore_threshold, default_charset, codec_out, strict) \ = (0, 0.8, 0.5, 50, '', 'utf-8', False) # = (0, 0.8, 0.5, 50, 'iso-8859-1', 'utf-8', False)
文字コード指定が無いときはiso-8859-1でエンコードしていたらしい。本当に完全な思いつきで空白にしてみただけなのだが、これで直ってしまった。
元々HTMLパーサでmetaタグのcharsetから文字コードを取得していたのだけど、どうやらdefault_charsetのほうが優先されてしまってたみたい。
#htmlparser3.py CHARSET_FIND = re.compile(r'charset\s*=\s*([^">;\s]+)', re.I) def hook_charset(self, attrs): if ('http-equiv' in attrs) and ('content' in attrs): m = self.CHARSET_FIND.search(attrs['content']) if m: self.set_charset(m.group(1)) elif 'charset' in attrs: self.set_charset(attrs['charset']) return
問題はmetaタグからcharsetを取得できなかった場合だが、とりあえず文字コード指定の無いHTMLを発見するまでは放置しておくことにした。
きっと次回へ続く。