From a7b2d9dae17db64ed032f9f6171add1c3eda4663 Mon Sep 17 00:00:00 2001 From: allenwtsu Date: Thu, 20 Jan 2022 17:51:17 +0800 Subject: [PATCH] ICU-21699 Add Japanese particle --- icu4c/source/common/dictbe.cpp | 16 ++--- icu4c/source/common/dictbe.h | 6 +- icu4c/source/data/brkitr/ja.txt | 68 ++++++++++++++++--- icu4c/source/test/testdata/rbbitst.txt | 13 ++-- .../icu/impl/breakiter/CjkBreakEngine.java | 18 +++-- icu4j/main/shared/data/icudata.jar | 4 +- icu4j/main/shared/data/icutzdata.jar | 2 +- icu4j/main/shared/data/testdata.jar | 2 +- .../src/com/ibm/icu/dev/test/rbbi/rbbitst.txt | 13 ++-- 9 files changed, 99 insertions(+), 43 deletions(-) diff --git a/icu4c/source/common/dictbe.cpp b/icu4c/source/common/dictbe.cpp index 08e4c0a9b7a..4fdbdf2760f 100644 --- a/icu4c/source/common/dictbe.cpp +++ b/icu4c/source/common/dictbe.cpp @@ -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 9 + // E.g. 乗車率90%程度だろうか -> 乗車▁率▁90%▁程度だろうか -> breakpoint between 率 and 9 // E.g. しかもロゴがUnicode! -> しかも▁ロゴが▁Unicode!-> breakpoint between が and U 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); } } } diff --git a/icu4c/source/common/dictbe.h b/icu4c/source/common/dictbe.h index a73274e3e9d..ca1a3c28b7b 100644 --- a/icu4c/source/common/dictbe.h +++ b/icu4c/source/common/dictbe.h @@ -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; diff --git a/icu4c/source/data/brkitr/ja.txt b/icu4c/source/data/brkitr/ja.txt index f36268c1712..1aa5914283c 100644 --- a/icu4c/source/data/brkitr/ja.txt +++ b/icu4c/source/data/brkitr/ja.txt @@ -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. + 々宮, 々家, え目, が丘, が台, + が床, が浜, ヵ国, ヵ年, ヵ所, + ヵ月, ヵ村, ヵ条, ヶ丘, ヶ国, + ヶ島, ヶ年, ヶ所, ヶ月, ヶ村, + ヶ条, ージ, ーズ, ータ, ード, + ーニャ, ープランス, ーユ, ーランド, ーリンズ, + ーン, } } diff --git a/icu4c/source/test/testdata/rbbitst.txt b/icu4c/source/test/testdata/rbbitst.txt index e74ee60edb6..cde514a2347 100644 --- a/icu4c/source/test/testdata/rbbitst.txt +++ b/icu4c/source/test/testdata/rbbitst.txt @@ -1892,8 +1892,8 @@ Bangkok)• •\uff19\u6708\u306b•\u6771\u4eac\u304b\u3089•\u53cb\u9054\u304c•\u904a\u3073\u306b•\u6765\u305f• #る文字「そうだ、京都」-> る•文字•「そうだ、•京都」• •\u308b•\u6587\u5b57•\u300c\u305d\u3046\u3060\u3001•\u4eac\u90fd\u300d• -#乗車率90%程度だろうか。 -> 乗車•率•90%•程度だ•ろうか。• -•\u4e57\u8eca•\u7387•\uff19\uff10\uff05•\u7a0b\u5ea6\u3060•\u308d\u3046\u304b\u3002• +#乗車率90%程度だろうか。 -> 乗車•率•90%•程度だろうか。• +•\u4e57\u8eca•\u7387•\uff19\uff10\uff05•\u7a0b\u5ea6\u3060\u308d\u3046\u304b\u3002• #[携帯電話]正しい選択 -> [携帯•電話]•正しい•選択• •\uff3b\u643a\u5e2f•\u96fb\u8a71\uff3d•\u6b63\u3057\u3044•\u9078\u629e• #純金製百人一首にサッカーボール -> 純金•製•百人一首に•サッカーボール @@ -1903,8 +1903,8 @@ Bangkok)• •\uD82C\uDC48\u308B\uD82C\uDC38•\uFF08\u3057\u308B\u3053\uFF09\u3001•\u3042\uD82C\uDC19\u3088\u308D\u3057•\uFF08\u3042•\u304B\u3088\u308D\u3057\uFF09• #最初に目に入るのは、「許諾なき写真禁止」のサインである。 -> 最初に▁目に▁入るのは、▁「許諾なき▁写真▁禁止」▁の▁サインで▁ある。 •\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• -# docomoのサイト情報によると、78000パケット以上▁使うならパケ放題がいいとか -> docomoの▁サイト▁情報によると、▁78000パケット▁以上▁使う▁なら▁パケ▁放題が▁いい▁とか -•\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• +#docomoのサイト情報によると、78000パケット以上▁使うならパケ放題がいいとか -> docomoの▁サイト▁情報によると、▁78000パケット▁以上▁使うなら▁パケ▁放題が▁いい▁とか +•\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• #日本の携帯はCDMAの形だといわれています -> 日本の▁携帯は▁CDMAの▁形だと▁いわれ▁ています •\u65E5\u672C\u306E•\u643A\u5E2F\u306F•\uFF23\uFF24\uFF2D\uFF21\u306E•\u5F62\u3060\u3068•\u3044\u308F\u308C•\u3066\u3044\u307E\u3059• #中国の携帯は約500元から5000元です -> 中国の▁携帯は▁約▁500元から▁5000元です @@ -1913,6 +1913,11 @@ Bangkok)• •\u30D7\u30EA\u30DA\u30A4\u30C9\u30AB\u30FC\u30C9•\u643A\u5E2F•\u5E03\u6559• #しかもロゴがUnicode!! -> しかも▁ロゴが▁Unicode!! •\u3057\u304B\u3082•\u30ED\u30B4\u304C•\uFF35\uFF4E\uFF49\uFF43\uFF4F\uFF44\uFF45\uFF01\uFF01• +#しかし、これらのサービスは6年間使ってこなかった自分にとっては特に必要でないものであり、これからこの機能が加わったからといって特別ハッピーなわけでもない。 +#-> しかし、▁これらの▁サービスは▁6年間▁使ってこなかった▁自分にとっては▁特に▁必要でない▁もので▁あり、▁これから▁この▁機能が▁加わったから▁といって▁特別▁ハッピーな▁わけでもない。 +•\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• +#自由が丘での三ヶ月の生活を通して得られる経験 -> 自由が丘での▁三ヶ月の▁生活を通して▁得られる▁経験 +•\u81EA\u7531\u304C\u4E18\u3067\u306E•\u4E09\u30F6\u6708\u306E•\u751F\u6D3B\u3092\u901A\u3057\u3066•\u5F97\u3089\u308C\u308B•\u7D4C\u9A13• #################################################################################### # diff --git a/icu4j/main/classes/core/src/com/ibm/icu/impl/breakiter/CjkBreakEngine.java b/icu4j/main/classes/core/src/com/ibm/icu/impl/breakiter/CjkBreakEngine.java index a6da7d502cc..ee66c46da0c 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/impl/breakiter/CjkBreakEngine.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/impl/breakiter/CjkBreakEngine.java @@ -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%程度だろうか -> 乗車▁率▁90%▁程度だ▁ろうか -> breakpoint between 率 and 9 + // E.g. 乗車率90%程度だろうか -> 乗車▁率▁90%▁程度だろうか -> breakpoint between 率 and 9 // E.g. しかもロゴがUnicode! -> しかも▁ロゴが▁Unicode!-> breakpoint between が and U if (isPhraseBreaking) { if (!fDigitOrOpenPunctuationOrAlphabetSet.contains(inText.setIndex(endPos))) { diff --git a/icu4j/main/shared/data/icudata.jar b/icu4j/main/shared/data/icudata.jar index 0dc31673b4c..ca62e9d0332 100644 --- a/icu4j/main/shared/data/icudata.jar +++ b/icu4j/main/shared/data/icudata.jar @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:658d41e63f73089111e306f0d90b2b3aa4757146d4eda963f8e181c0acf2b9ab -size 13866832 +oid sha256:a2023c8c2492957393643b34d6b9396060acb3dd8d66d28bf023d118ea03eab7 +size 13867661 diff --git a/icu4j/main/shared/data/icutzdata.jar b/icu4j/main/shared/data/icutzdata.jar index 7ce295810ed..669f41ed5b7 100644 --- a/icu4j/main/shared/data/icutzdata.jar +++ b/icu4j/main/shared/data/icutzdata.jar @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:79e4e94b0fc31ed37701b94512b985c6bf80429bb3420adb645abc4f26c913d7 +oid sha256:1bbf45782f7b1026b5ead53ffa5c1d77bb2dc8e45bdf8774be2dae31855a6e63 size 96440 diff --git a/icu4j/main/shared/data/testdata.jar b/icu4j/main/shared/data/testdata.jar index a504f688321..9b3f04cac48 100644 --- a/icu4j/main/shared/data/testdata.jar +++ b/icu4j/main/shared/data/testdata.jar @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c20f10955116ac255c504e8743a9c4b2eab9c0bac7dc2250f1fbe775100f3b8a +oid sha256:26b283b1ea008e2750b1dfcfc1150fce21dc5fcbdcb4f79b1a9148e18ce926f1 size 826064 diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/rbbi/rbbitst.txt b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/rbbi/rbbitst.txt index 0645d0b6bbd..17418e382de 100644 --- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/rbbi/rbbitst.txt +++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/rbbi/rbbitst.txt @@ -1892,8 +1892,8 @@ Bangkok)• •\uff19\u6708\u306b•\u6771\u4eac\u304b\u3089•\u53cb\u9054\u304c•\u904a\u3073\u306b•\u6765\u305f• #る文字「そうだ、京都」-> る•文字•「そうだ、•京都」• •\u308b•\u6587\u5b57•\u300c\u305d\u3046\u3060\u3001•\u4eac\u90fd\u300d• -#乗車率90%程度だろうか。 -> 乗車•率•90%•程度だ•ろうか。• -•\u4e57\u8eca•\u7387•\uff19\uff10\uff05•\u7a0b\u5ea6\u3060•\u308d\u3046\u304b\u3002• +#乗車率90%程度だろうか。 -> 乗車•率•90%•程度だろうか。• +•\u4e57\u8eca•\u7387•\uff19\uff10\uff05•\u7a0b\u5ea6\u3060\u308d\u3046\u304b\u3002• #[携帯電話]正しい選択 -> [携帯•電話]•正しい•選択• •\uff3b\u643a\u5e2f•\u96fb\u8a71\uff3d•\u6b63\u3057\u3044•\u9078\u629e• #純金製百人一首にサッカーボール -> 純金•製•百人一首に•サッカーボール @@ -1903,8 +1903,8 @@ Bangkok)• •\uD82C\uDC48\u308B\uD82C\uDC38•\uFF08\u3057\u308B\u3053\uFF09\u3001•\u3042\uD82C\uDC19\u3088\u308D\u3057•\uFF08\u3042•\u304B\u3088\u308D\u3057\uFF09• #最初に目に入るのは、「許諾なき写真禁止」のサインである。 -> 最初に▁目に▁入るのは、▁「許諾なき▁写真▁禁止」▁の▁サインで▁ある。 •\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• -# docomoのサイト情報によると、78000パケット以上▁使うならパケ放題がいいとか -> docomoの▁サイト▁情報によると、▁78000パケット▁以上▁使う▁なら▁パケ▁放題が▁いい▁とか -•\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• +#docomoのサイト情報によると、78000パケット以上▁使うならパケ放題がいいとか -> docomoの▁サイト▁情報によると、▁78000パケット▁以上▁使うなら▁パケ▁放題が▁いい▁とか +•\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• #日本の携帯はCDMAの形だといわれています -> 日本の▁携帯は▁CDMAの▁形だと▁いわれ▁ています •\u65E5\u672C\u306E•\u643A\u5E2F\u306F•\uFF23\uFF24\uFF2D\uFF21\u306E•\u5F62\u3060\u3068•\u3044\u308F\u308C•\u3066\u3044\u307E\u3059• #中国の携帯は約500元から5000元です -> 中国の▁携帯は▁約▁500元から▁5000元です @@ -1913,6 +1913,11 @@ Bangkok)• •\u30D7\u30EA\u30DA\u30A4\u30C9\u30AB\u30FC\u30C9•\u643A\u5E2F•\u5E03\u6559• #しかもロゴがUnicode!! -> しかも▁ロゴが▁Unicode!! •\u3057\u304B\u3082•\u30ED\u30B4\u304C•\uFF35\uFF4E\uFF49\uFF43\uFF4F\uFF44\uFF45\uFF01\uFF01• +#しかし、これらのサービスは6年間使ってこなかった自分にとっては特に必要でないものであり、これからこの機能が加わったからといって特別ハッピーなわけでもない。 +#-> しかし、▁これらの▁サービスは▁6年間▁使ってこなかった▁自分にとっては▁特に▁必要でない▁もので▁あり、▁これから▁この▁機能が▁加わったから▁といって▁特別▁ハッピーな▁わけでもない。 +•\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• +#自由が丘での三ヶ月の生活を通して得られる経験 -> 自由が丘での▁三ヶ月の▁生活を通して▁得られる▁経験 +•\u81EA\u7531\u304C\u4E18\u3067\u306E•\u4E09\u30F6\u6708\u306E•\u751F\u6D3B\u3092\u901A\u3057\u3066•\u5F97\u3089\u308C\u308B•\u7D4C\u9A13• #################################################################################### # -- 2.40.0