perlexのバグ情報
Perlexは何度もこのページで紹介しているが,要は形態素辞書.
しかし,よくよく調べてみると,不可解な現象がいくつも発生していた.
例えば,以下
anga¹tn 108 V [pred="anga¹tn_____1",cat=V,@2*3plPreparfFam] anga¹tn_____1 Default 2*3plPreparfFam %default v9
見出し語の途中に右肩についた1が出現している.これはラテン文字の文字でu00B9でユニコード体系にも組み込まれている.
Unicode Character 'SUPERSCRIPT ONE' (U+00B9)
が,当然,そんな文字はペルシア語には存在していない.Perlexの中で意図された特殊な記号か?と思うも,そうでもない.
結局,バグと解釈するのが正しかった.
で,バグとわかったはいいものの,今度は報告先が見つからない.
INRIAGForge: Alexina: Project Filelist
しかも,論文のfirst auhorにメールしても連絡はとれない.
仕方がないので,記録程度にここに記しておくことにする.
右肩に文字がつく現象はこの他にも数種存在している.
そこで,自分が調べられる範囲内で調査をして,後処理のスクリプトを書いた.
#! /usr/bin/python #-*- coding:utf-8 -*- import sys, codecs, re; f=codecs.open('test.fix.lex', 'w', 'utf-8'); #with open('N.lex', 'r') as lines: with codecs.open('N.lex', 'r', 'latin_1') as lines: for line in lines: error_line=line; #print [error_line] if re.findall(ur'\xb9', error_line): error_line=error_line.replace(u'\xb9', u'š'); if re.findall(ur'\xba', error_line): error_line=error_line.replace(u'\xba', u'ş'); if re.findall(r'\xbc', error_line): error_line=error_line.replace(u'\xbc', u'ź'); if re.findall(r'\xbf', error_line): error_line=error_line.replace(u'\xbf', u'ẓ'); if re.findall(r'\xbe', error_line): error_line=error_line.replace(u'\xbe', u'ž'); if re.findall(r'\xfe', error_line): error_line=error_line.replace(u'\xfe', u'ţ'); if re.findall(r'\xb3', error_line): error_line=error_line.replace(u'\xb3', u'ħ'); if re.findall(r'â', error_line): error_line=error_line.replace(u'â', u'ā'); if re.findall(r'ð', error_line): error_line=error_line.replace(u'ð', u'đ'); if re.findall(ur'è', error_line): error_line=error_line.replace(u'è', u'č'); f.write(error_line); f.close();
ちなみに,このPerlex,utf-8でファイルをデコードしようとすると失敗する.正解の文字コードはlatin-1.
なんでそんなややこいもん使ってるんや.と思うが,フランス人が作成しているプロジェクトなのでlatin-1が主流に使われたのかもしれない.