タグ別アーカイブ: NLP

LanguageToolで長音記号チェック

漢字変換ミスで、たまに長音記号がかな文字以外の後に置かれる事例を見かけたので、それをLanguageToolのルールにして取り込んでもらいました

現状ある日本語のルールをざっと見たのですが、うまい具合に表現する方法が思い浮かばなかったので、思い切ってメーリングリストで聞いてみました。

メイン開発者のDanielさんは親切で反応も早い方で、「正規表現でUnicodeの範囲を使えばできる」という方法を示してくれました。また、過去にも日本語のルールを書いているSilvanさんからは、JavaにおけるUnicodeのクラス表現(\p{IsXxx})を紹介してくれました。

これらを踏まえ、以下のようなルールをpull requestとして書き、無事masterにマージしてもらえました。

                <rule id="SINGLE-MARKON" name="長音">
                  <pattern case_sensitive="no">
                    <token regexp="yes">[^\p{IsKatakana}\p{IsHiragana}]+</token>
                    <token >ー</token>
                  </pattern>
                  <message>不適切な長音符</message>
                  <example><marker>リンカー</marker></example>
                  <example correction=""><marker>隣家ー</marker></example>
                </rule>

カタカナとひらがな以外が長音記号の前にあるとき、LanguageToolは警告を出します。

$ echo "隣家ー" |java -jar languagetool-commandline.jar -l ja-JP -c UTF-8
Expected text language: Japanese (no spell checking active, specify a language variant like 'en-GB' if available)
Working on STDIN...
1.) Line 1, column 1, Rule ID: SINGLE-MARKON[1]
Message: 不適切な長音符
隣家ー
^^^
Time: 529ms for 1 sentences (1.9 sentences/sec)

この機会に、Doc-ja Wikiの”LanguageTool使い方メモ“も若干修正しました。自前のgrammar.xmlを指定して起動する方法と、ソースコード上で変更をしたときにルールのテストをする方法について新た説明を加えています。

LanguageToolのリリースバージョンは現在2.9ですが、次期バージョン3.0ではgrammar.xmlの書式も変わっているため、いずれWiki内の説明もそちらに合わせて修正したいところです。

HTMLタグを含むpoファイルからプレーンテキストにまで加工して形態素解析にかけてみてtypo等を見つける (Doc-ja Advent Calendar 2013)

これはDoc-ja Advent Calendar 2013 5日目の記事です。

www.gnu.orgでは、現在GNU website Japanese Translation Teamにてチーム体制でwebの翻訳を進めています。実態はほとんどgniibeさん一人で、私は今のところ翻訳チェックぐらいしかできていませんが…

gnu.orgのwebはメッセージの中にHTMLタグも含んだ状態で、poファイルによって管理されています。レビューをする上では、なかなか扱いにくい形式です。

そこで、私は一度poから日本語訳文のテキストを生成し、もう少し見やすくした状態でレビューをしています。この記事では、その方法を紹介します

$ msgfmt file.po
$ msgunfmt --no-wrap message.mo | grep msgstr |
sed -e 's/^msgstr //' -e 's/$//' | 
sed -e 's/^"/<p>/' -e 's/"$//' |
w3m -T text/html | lv

さらに、結果を形態素解析にかければ、若干typo等が見つけやすくなります

$ mecab file.txt
:
(中略)
JavaScript      名詞,固有名詞,組織,*,*,*,*
の      助詞,連体化,*,*,*,*,の,ノ,ノ
ライセンス・ウェブ・ラベル      名詞,一般,*,*,*,*,*
の      助詞,連体化,*,*,*,*,の,ノ,ノ
ため    名詞,非自立,副詞可能,*,*,*,ため,タメ,タメ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
ページ  名詞,一般,*,*,*,*,ページ,ページ,ページ
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
あなた  名詞,代名詞,一般,*,*,*,あなた,アナタ,アナタ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
サイト  名詞,一般,*,*,*,*,サイト,サイト,サイト
に      助詞,格助詞,一般,*,*,*,に,ニ,ニ
追加    名詞,サ変接続,*,*,*,*,追加,ツイカ,ツイカ
しま    名詞,一般,*,*,*,*,しま,シマ,シマ
EOS
す      名詞,一般,*,*,*,*,す,ス,ス
。      記号,句点,*,*,*,*,。,。,。
:
(以下略)

今時の形態素解析器はできるだけ細かく分解する方向の実装・辞書が多いので、KAKASIなどを使った方がよいかもしれません。