質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

1493閲覧

com.ibm.icu.text.RuleBasedBreakIteratorのコンストラクタのパラメータを教えてください

tmakita

総合スコア69

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2016/10/26 16:09

###聞きたいこと
ICUのcom.ibm.icu.text.RuleBasedBreakIteratorのコンストラクタは次のような形式をしています.

public RuleBasedBreakIterator(String rules)
Construct a RuleBasedBreakIterator from a set of rules supplied as a string.
Parameters:
rules - The break rules to be used.

このパラメータのrulesの書き方をWEBで当たったのですが私の力ではどうしてもたどり着けません.もし御存じの方がおられましたら教えてください.

###背景
若干背景を説明しておきます.中国語簡体字の文字列から単語を切り出し、正確なピンインを知りたいのです.com.ibm.icu.text.BreakIteratorを使って例えば次のようなテストプログラムを作ってみました.中国語は適当です.

java

1import com.ibm.icu.text.BreakIterator; 2import java.util.Locale; 3public class StringSplitTest { 4 public static void main(String[] args) { 5 //重形式轻内容 zhong4 xing2 shi4 qing1 nei4 rong2 6 //重修旧好 chong2 xiu1 jiu4 hao3 7 String stringToExamine = "重形式轻内容和重修旧好"; 8 //print each word in order 9 BreakIterator boundary = BreakIterator.getWordInstance(Locale.SIMPLIFIED_CHINESE); 10 boundary.setText(stringToExamine); 11 printEachForward(boundary, stringToExamine); 12 } 13 public static void printEachForward(BreakIterator boundary, String source) { 14 int start = boundary.first(); 15 for (int end = boundary.next(); 16 end != BreakIterator.DONE; 17 start = end, end = boundary.next()) { 18 System.out.println(source.substring(start,end)); 19 } 20 } 21}

これを実行すると


形式

内容

重修旧好

と出力されます."重"は中国語でzhong4(重い)とchong2(重なる)の読みがあり、それ一文字ではどちらか判別できません.もしこれが

重形式轻内容

重修旧好

と単語分割されれば、単語から辞書を引いて正確なピンインを得ることができます.ICU備え付けの辞書ではどうもそうなってくれないようなので逆にcom.ibm.icu.text.RuleBasedBreakIteratorのインスタンスをそれなりの単語数の辞書を使ったルールを使って生成して使えばうまく分割されるのではないか?と考えた次第です.

以上 よろしくお願いします.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

コンストラクタには、ルールそのものを文字列で与えればいいです。

  • ご覧になっているとは思いますが、ルールの構文はこちら
  • ここの解説なんかも参考になります。

投稿2016/10/26 23:35

ikedas

総合スコア4229

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tmakita

2016/10/27 00:55

ikedas様 ありがとうございました. http://sujitpal.blogspot.jp/2008/05/tokenizing-text-with-icu4js.html のコメントにもあるように、ルールの構文は難しそうですね "I found the ICU4J rule file syntax quite hard to understand too. " ちなみに http://source.icu-project.org/repos/icu/icu/trunk/source/data/brkitr/dictionaries/cjdict.txt がICUの元の辞書のようなところまではわかりました. 読んで勉強してみます. 以上
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問