ICU-21699 Add Japanese particle

This commit is contained in:
allenwtsu 2022-01-20 17:51:17 +08:00 committed by Peter Edberg
parent 2a7c465284
commit a7b2d9dae1
9 changed files with 99 additions and 43 deletions

View file

@ -1434,7 +1434,7 @@ CjkBreakEngine::divideUpDictionaryRange( UText *inText,
// In phrase breaking, there has to be a breakpoint between Cj character and
// the number/open punctuation.
// E.g. る文字「そうだ、京都」->る▁文字▁「そうだ、▁京都」-> breakpoint between 字 and「
// E.g. 乗車率90%程度だろうか -> 乗車▁率▁90%▁程度だろうか -> breakpoint between 率 and
// E.g. 乗車率90%程度だろうか -> 乗車▁率▁90%▁程度だろうか -> breakpoint between 率 and
// E.g. しかもロゴがUnicode! -> しかも▁ロゴが▁Unicode!-> breakpoint between が and
if (isPhraseBreaking) {
if (!fDigitOrOpenPunctuationOrAlphabetSet.contains(nextChar)) {
@ -1453,19 +1453,17 @@ CjkBreakEngine::divideUpDictionaryRange( UText *inText,
}
void CjkBreakEngine::initJapanesePhraseParameter(UErrorCode& error) {
loadJapaneseParticleAndAuxVerbs(error);
loadJapaneseExtensions(error);
loadHiragana(error);
}
void CjkBreakEngine::loadJapaneseParticleAndAuxVerbs(UErrorCode& error) {
const char* tags[2] = { "particles", "auxVerbs" };
void CjkBreakEngine::loadJapaneseExtensions(UErrorCode& error) {
const char* tag = "extensions";
ResourceBundle ja(U_ICUDATA_BRKITR, "ja", error);
if (U_SUCCESS(error)) {
for (int32_t i = 0; i < 2; i++) {
ResourceBundle bundle = ja.get(tags[i], error);
while (U_SUCCESS(error) && bundle.hasNext()) {
fSkipSet.puti(bundle.getNextString(error), 1, error);
}
ResourceBundle bundle = ja.get(tag, error);
while (U_SUCCESS(error) && bundle.hasNext()) {
fSkipSet.puti(bundle.getNextString(error), 1, error);
}
}
}

View file

@ -376,11 +376,11 @@ class CjkBreakEngine : public DictionaryBreakEngine {
const Normalizer2 *nfkcNorm2;
private:
// Load Japanese particles and auxiliary verbs.
void loadJapaneseParticleAndAuxVerbs(UErrorCode& error);
// Load Japanese extensions.
void loadJapaneseExtensions(UErrorCode& error);
// Load Japanese Hiragana.
void loadHiragana(UErrorCode& error);
// Initialize fSkipSet by loading Japanese Hiragana, particles and auxiliary verbs.
// Initialize fSkipSet by loading Japanese Hiragana and extensions.
void initJapanesePhraseParameter(UErrorCode& error);
Hashtable fSkipSet;

View file

@ -12,14 +12,64 @@ ja{
line_strict:process(dependency){"line_cj.brk"}
line_strict_phrase:process(dependency){"line_phrase_cj.brk"}
}
particles{
か, かしら, から, が, くらい, けれども, こそ,
さ, さえ, しか, だけ, だに, だの, て, で, でも,
と, ところが, とも, な, など, なり, に, ね, の,
ので, のに, は, ば, ばかり, へ, ほど, まで, も,
や, やら, よ, より, わ, を
}
auxVerbs {
です, でしょ, でし, ます, ませ, まし
extensions{
// Extensions.
// Entries in cjdict.txt categorized as particles (助詞), auxiliary verbs (助動詞),
// conjugations (活用) and prefix of them.
// These entries are connected to the previous words for phrase based line breaking.
// https://ja.wikipedia.org/wiki/助詞
// https://ja.wikipedia.org/wiki/助動詞_(国文法)
// https://ja.wikipedia.org/wiki/活用
かい, かしら, から, きり, くらい,
ぐらい, けれど, けれども, こそ, さえ,
しか, した, ずつ, せる, せん,
たい, たがる, たく, たら, たり,
だけ, だに, だの, だり, つつ,
てる, です, でも, ところが, ところで,
とも, ない, なか, ながら, なく,
なし, なぞ, など, なら, なり,
なんぞ, ねる, ので, のに, のみ,
ばかり, へる, ほど, まい, まう,
まし, ます, まっ, まで, まま,
もん, やら, よう, より, らしい,
られる, れる, ろう, わっ, わな,
わら, わり, わる, われ, わん,
// Entries added for technical reasons (particle + others).
// Entries in cjdict.txt, which are compound words starting from the above categories
// (i.e. particles, auxiliary verbs and conjunctions).
// These entries are connected to the previous words for phrase based line breaking.
えたい, えて, える, けた, けたい,
ける, させる, そうだ, っきゃ, っきり,
っけ, っす, ったらしい, っちゅう, って,
っていう, ってか, ってな, っと, っぱなし,
っぷり, っぽい, にあう, にあがる, にあたって,
にあたり, にあたりまして, にあたります, にあたる, において,
におきまして, における, にかけ, にかけて, にかけまして,
にたいして, にたいしまして, にたいします, にたいする, について,
につき, につきまして, につけ, につれ, につれて,
にて, にとって, にとり, にとりまして, にまつわります,
にまつわる, にもかかわらず, にゃ, によって, により,
によりまして, によります, による, にわたって, にわたり,
にわたりまして, にわたります, にわたる, に対し, に対して,
に対しまして, に対します, に対する, に当たって, に当たり,
に当たりまして, に当たります, に当たる, に従い, に従いまして,
に従います, に従う, に従って, に関し, に関して,
に関しまして, に関します, に関する, に際し, に際して,
ものの, ろうし, ろうと, われと, をの,
をめぐって, をめぐりまして, をめぐります, をめぐる, をもちまして,
をもって, を以て, を通して, を通しまして, を通じ,
を通じて, を通じまして, んじゃ, んで,
// Entries added for technical reasons (noun suffix).
// Entries in cjdict.txt, which are suffixes of nouns.
// These entries should be connected to the previous (noun) words.
々宮, 々家, え目, が丘, が台,
が床, が浜, ヵ国, ヵ年, ヵ所,
ヵ月, ヵ村, ヵ条, ヶ丘, ヶ国,
ヶ島, ヶ年, ヶ所, ヶ月, ヶ村,
ヶ条, ージ, ーズ, ータ, ード,
ーニャ, ープランス, ーユ, ーランド, ーリンズ,
ーン,
}
}

View file

@ -1892,8 +1892,8 @@ Bangkok)•</data>
<data>•\uff19\u6708\u306b•\u6771\u4eac\u304b\u3089•\u53cb\u9054\u304c•\u904a\u3073\u306b•\u6765\u305f•</data>
#る文字「そうだ、京都」-> る•文字•「そうだ、•京都」•
<data>•\u308b•\u6587\u5b57•\u300c\u305d\u3046\u3060\u3001•\u4eac\u90fd\u300d•</data>
#乗車率90%程度だろうか。 -> 乗車•率•90%•程度だろうか。•
<data>•\u4e57\u8eca•\u7387•\uff19\uff10\uff05•\u7a0b\u5ea6\u3060\u308d\u3046\u304b\u3002•</data>
#乗車率90%程度だろうか。 -> 乗車•率•90%•程度だろうか。•
<data>•\u4e57\u8eca•\u7387•\uff19\uff10\uff05•\u7a0b\u5ea6\u3060\u308d\u3046\u304b\u3002•</data>
#[携帯電話]正しい選択 -> [携帯•電話]•正しい•選択•
<data>•\uff3b\u643a\u5e2f•\u96fb\u8a71\uff3d•\u6b63\u3057\u3044•\u9078\u629e•</data>
#純金製百人一首にサッカーボール -> 純金•製•百人一首に•サッカーボール
@ -1903,8 +1903,8 @@ Bangkok)•</data>
<data>•\uD82C\uDC48\u308B\uD82C\uDC38•\uFF08\u3057\u308B\u3053\uFF09\u3001•\u3042\uD82C\uDC19\u3088\u308D\u3057•\uFF08\u3042•\u304B\u3088\u308D\u3057\uFF09•</data>
#最初に目に入るのは、「許諾なき写真禁止」のサインである。 -> 最初に▁目に▁入るのは、▁「許諾なき▁写真▁禁止」▁の▁サインで▁ある。
<data>•\u6700\u521D\u306B•\u76EE\u306B•\u5165\u308B\u306E\u306F\u3001•\u300C\u8A31\u8AFE\u306A\u304D•\u5199\u771F•\u7981\u6B62\u300D•\u306E•\u30B5\u30A4\u30F3\u3067•\u3042\u308B\u3002•</data>
# docomoのサイト情報によると、78000パケット以上▁使うならパケ放題がいいとか -> docomoの▁サイト▁情報によると、▁78000パケット▁以上▁使うなら▁パケ▁放題が▁いい▁とか
<data>•\uFF44\uFF4F\uFF43\uFF4F\uFF4D\uFF4F\u306E•\u30B5\u30A4\u30C8•\u60C5\u5831\u306B\u3088\u308B\u3068\u3001•\uFF17\uFF18\uFF10\uFF10\uFF10\u30D1\u30B1\u30C3\u30C8•\u4EE5\u4E0A•\u4F7F\u3046\u306A\u3089•\u30D1\u30B1•\u653E\u984C\u304C•\u3044\u3044•\u3068\u304B•</data>
#docomoのサイト情報によると、78000パケット以上▁使うならパケ放題がいいとか -> docomoの▁サイト▁情報によると、▁78000パケット▁以上▁使うなら▁パケ▁放題が▁いい▁とか
<data>•\uFF44\uFF4F\uFF43\uFF4F\uFF4D\uFF4F\u306E•\u30B5\u30A4\u30C8•\u60C5\u5831\u306B\u3088\u308B\u3068\u3001•\uFF17\uFF18\uFF10\uFF10\uFF10\u30D1\u30B1\u30C3\u30C8•\u4EE5\u4E0A•\u4F7F\u3046\u306A\u3089•\u30D1\u30B1•\u653E\u984C\u304C•\u3044\u3044•\u3068\u304B•</data>
#日本の携帯はCDMAの形だといわれています -> 日本の▁携帯は▁CDMAの▁形だと▁いわれ▁ています
<data>•\u65E5\u672C\u306E•\u643A\u5E2F\u306F•\uFF23\uFF24\uFF2D\uFF21\u306E•\u5F62\u3060\u3068•\u3044\u308F\u308C•\u3066\u3044\u307E\u3059•</data>
#中国の携帯は約500元から5000元です -> 中国の▁携帯は▁約▁500元から▁5000元です
@ -1913,6 +1913,11 @@ Bangkok)•</data>
<data>•\u30D7\u30EA\u30DA\u30A4\u30C9\u30AB\u30FC\u30C9•\u643A\u5E2F•\u5E03\u6559•</data>
#しかもロゴがUnicode!! -> しかも▁ロゴが▁Unicode!!
<data>•\u3057\u304B\u3082•\u30ED\u30B4\u304C•\uFF35\uFF4E\uFF49\uFF43\uFF4F\uFF44\uFF45\uFF01\uFF01•</data>
#しかし、これらのサービスは6年間使ってこなかった自分にとっては特に必要でないものであり、これからこの機能が加わったからといって特別ハッピーなわけでもない。
#-> しかし、▁これらの▁サービスは▁6年間▁使ってこなかった▁自分にとっては▁特に▁必要でない▁もので▁あり、▁これから▁この▁機能が▁加わったから▁といって▁特別▁ハッピーな▁わけでもない。
<data>•\u3057\u304B\u3057\u3001•\u3053\u308C\u3089\u306E•\u30B5\u30FC\u30D3\u30B9\u306F•\uFF16\u5E74\u9593•\u4F7F\u3063\u3066\u3053\u306A\u304B\u3063\u305F•\u81EA\u5206\u306B\u3068\u3063\u3066\u306F•\u7279\u306B•\u5FC5\u8981\u3067\u306A\u3044•\u3082\u306E\u3067•\u3042\u308A\u3001•\u3053\u308C\u304B\u3089•\u3053\u306E•\u6A5F\u80FD\u304C•\u52A0\u308F\u3063\u305F\u304B\u3089•\u3068\u3044\u3063\u3066•\u7279\u5225•\u30CF\u30C3\u30D4\u30FC\u306A•\u308F\u3051\u3067\u3082\u306A\u3044\u3002•</data>
#自由が丘での三ヶ月の生活を通して得られる経験 -> 自由が丘での▁三ヶ月の▁生活を通して▁得られる▁経験
<data>•\u81EA\u7531\u304C\u4E18\u3067\u306E•\u4E09\u30F6\u6708\u306E•\u751F\u6D3B\u3092\u901A\u3057\u3066•\u5F97\u3089\u308C\u308B•\u7D4C\u9A13•</data>
####################################################################################
#

View file

@ -54,19 +54,17 @@ public class CjkBreakEngine extends DictionaryBreakEngine {
}
private void initializeJapanesePhraseParamater() {
loadJapaneseParticleAndAuxVerbs();
loadJapaneseExtensions();
loadHiragana();
}
private void loadJapaneseParticleAndAuxVerbs() {
private void loadJapaneseExtensions() {
UResourceBundle rb = UResourceBundle.getBundleInstance(ICUData.ICU_BRKITR_BASE_NAME, "ja");
final String[] tags = {"particles", "auxVerbs"};
for (String tag : tags) {
UResourceBundle bundle = rb.get(tag);
UResourceBundleIterator iterator = bundle.getIterator();
while (iterator.hasNext()) {
fSkipSet.add(iterator.nextString());
}
final String tag = "extensions";
UResourceBundle bundle = rb.get(tag);
UResourceBundleIterator iterator = bundle.getIterator();
while (iterator.hasNext()) {
fSkipSet.add(iterator.nextString());
}
}
@ -293,7 +291,7 @@ public class CjkBreakEngine extends DictionaryBreakEngine {
// In phrase breaking, there has to be a breakpoint between Cj character and
// the number/open punctuation.
// E.g. る文字そうだ京都->文字そうだ京都-> breakpoint between and
// E.g. 乗車率90程度だろうか -> 乗車程度だろうか -> breakpoint between and
// E.g. 乗車率90程度だろうか -> 乗車程度だろうか -> breakpoint between and
// E.g. しかもロゴがUnicode -> しかもロゴが-> breakpoint between and
if (isPhraseBreaking) {
if (!fDigitOrOpenPunctuationOrAlphabetSet.contains(inText.setIndex(endPos))) {

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:658d41e63f73089111e306f0d90b2b3aa4757146d4eda963f8e181c0acf2b9ab
size 13866832
oid sha256:a2023c8c2492957393643b34d6b9396060acb3dd8d66d28bf023d118ea03eab7
size 13867661

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:79e4e94b0fc31ed37701b94512b985c6bf80429bb3420adb645abc4f26c913d7
oid sha256:1bbf45782f7b1026b5ead53ffa5c1d77bb2dc8e45bdf8774be2dae31855a6e63
size 96440

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c20f10955116ac255c504e8743a9c4b2eab9c0bac7dc2250f1fbe775100f3b8a
oid sha256:26b283b1ea008e2750b1dfcfc1150fce21dc5fcbdcb4f79b1a9148e18ce926f1
size 826064

View file

@ -1892,8 +1892,8 @@ Bangkok)•</data>
<data>•\uff19\u6708\u306b•\u6771\u4eac\u304b\u3089•\u53cb\u9054\u304c•\u904a\u3073\u306b•\u6765\u305f•</data>
#る文字「そうだ、京都」-> る•文字•「そうだ、•京都」•
<data>•\u308b•\u6587\u5b57•\u300c\u305d\u3046\u3060\u3001•\u4eac\u90fd\u300d•</data>
#乗車率90%程度だろうか。 -> 乗車•率•90%•程度だろうか。•
<data>•\u4e57\u8eca•\u7387•\uff19\uff10\uff05•\u7a0b\u5ea6\u3060\u308d\u3046\u304b\u3002•</data>
#乗車率90%程度だろうか。 -> 乗車•率•90%•程度だろうか。•
<data>•\u4e57\u8eca•\u7387•\uff19\uff10\uff05•\u7a0b\u5ea6\u3060\u308d\u3046\u304b\u3002•</data>
#[携帯電話]正しい選択 -> [携帯•電話]•正しい•選択•
<data>•\uff3b\u643a\u5e2f•\u96fb\u8a71\uff3d•\u6b63\u3057\u3044•\u9078\u629e•</data>
#純金製百人一首にサッカーボール -> 純金•製•百人一首に•サッカーボール
@ -1903,8 +1903,8 @@ Bangkok)•</data>
<data>•\uD82C\uDC48\u308B\uD82C\uDC38•\uFF08\u3057\u308B\u3053\uFF09\u3001•\u3042\uD82C\uDC19\u3088\u308D\u3057•\uFF08\u3042•\u304B\u3088\u308D\u3057\uFF09•</data>
#最初に目に入るのは、「許諾なき写真禁止」のサインである。 -> 最初に▁目に▁入るのは、▁「許諾なき▁写真▁禁止」▁の▁サインで▁ある。
<data>•\u6700\u521D\u306B•\u76EE\u306B•\u5165\u308B\u306E\u306F\u3001•\u300C\u8A31\u8AFE\u306A\u304D•\u5199\u771F•\u7981\u6B62\u300D•\u306E•\u30B5\u30A4\u30F3\u3067•\u3042\u308B\u3002•</data>
# docomoのサイト情報によると、78000パケット以上▁使うならパケ放題がいいとか -> docomoの▁サイト▁情報によると、▁78000パケット▁以上▁使うなら▁パケ▁放題が▁いい▁とか
<data>•\uFF44\uFF4F\uFF43\uFF4F\uFF4D\uFF4F\u306E•\u30B5\u30A4\u30C8•\u60C5\u5831\u306B\u3088\u308B\u3068\u3001•\uFF17\uFF18\uFF10\uFF10\uFF10\u30D1\u30B1\u30C3\u30C8•\u4EE5\u4E0A•\u4F7F\u3046\u306A\u3089•\u30D1\u30B1•\u653E\u984C\u304C•\u3044\u3044•\u3068\u304B•</data>
#docomoのサイト情報によると、78000パケット以上▁使うならパケ放題がいいとか -> docomoの▁サイト▁情報によると、▁78000パケット▁以上▁使うなら▁パケ▁放題が▁いい▁とか
<data>•\uFF44\uFF4F\uFF43\uFF4F\uFF4D\uFF4F\u306E•\u30B5\u30A4\u30C8•\u60C5\u5831\u306B\u3088\u308B\u3068\u3001•\uFF17\uFF18\uFF10\uFF10\uFF10\u30D1\u30B1\u30C3\u30C8•\u4EE5\u4E0A•\u4F7F\u3046\u306A\u3089•\u30D1\u30B1•\u653E\u984C\u304C•\u3044\u3044•\u3068\u304B•</data>
#日本の携帯はCDMAの形だといわれています -> 日本の▁携帯は▁CDMAの▁形だと▁いわれ▁ています
<data>•\u65E5\u672C\u306E•\u643A\u5E2F\u306F•\uFF23\uFF24\uFF2D\uFF21\u306E•\u5F62\u3060\u3068•\u3044\u308F\u308C•\u3066\u3044\u307E\u3059•</data>
#中国の携帯は約500元から5000元です -> 中国の▁携帯は▁約▁500元から▁5000元です
@ -1913,6 +1913,11 @@ Bangkok)•</data>
<data>•\u30D7\u30EA\u30DA\u30A4\u30C9\u30AB\u30FC\u30C9•\u643A\u5E2F•\u5E03\u6559•</data>
#しかもロゴがUnicode!! -> しかも▁ロゴが▁Unicode!!
<data>•\u3057\u304B\u3082•\u30ED\u30B4\u304C•\uFF35\uFF4E\uFF49\uFF43\uFF4F\uFF44\uFF45\uFF01\uFF01•</data>
#しかし、これらのサービスは6年間使ってこなかった自分にとっては特に必要でないものであり、これからこの機能が加わったからといって特別ハッピーなわけでもない。
#-> しかし、▁これらの▁サービスは▁6年間▁使ってこなかった▁自分にとっては▁特に▁必要でない▁もので▁あり、▁これから▁この▁機能が▁加わったから▁といって▁特別▁ハッピーな▁わけでもない。
<data>•\u3057\u304B\u3057\u3001•\u3053\u308C\u3089\u306E•\u30B5\u30FC\u30D3\u30B9\u306F•\uFF16\u5E74\u9593•\u4F7F\u3063\u3066\u3053\u306A\u304B\u3063\u305F•\u81EA\u5206\u306B\u3068\u3063\u3066\u306F•\u7279\u306B•\u5FC5\u8981\u3067\u306A\u3044•\u3082\u306E\u3067•\u3042\u308A\u3001•\u3053\u308C\u304B\u3089•\u3053\u306E•\u6A5F\u80FD\u304C•\u52A0\u308F\u3063\u305F\u304B\u3089•\u3068\u3044\u3063\u3066•\u7279\u5225•\u30CF\u30C3\u30D4\u30FC\u306A•\u308F\u3051\u3067\u3082\u306A\u3044\u3002•</data>
#自由が丘での三ヶ月の生活を通して得られる経験 -> 自由が丘での▁三ヶ月の▁生活を通して▁得られる▁経験
<data>•\u81EA\u7531\u304C\u4E18\u3067\u306E•\u4E09\u30F6\u6708\u306E•\u751F\u6D3B\u3092\u901A\u3057\u3066•\u5F97\u3089\u308C\u308B•\u7D4C\u9A13•</data>
####################################################################################
#