ja-compromise 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +367 -6
  3. package/builds/ja-compromise.cjs +4389 -2286
  4. package/builds/ja-compromise.min.js +1 -1
  5. package/builds/ja-compromise.mjs +1 -1
  6. package/package.json +36 -23
  7. package/src/01-one/conjugate/conjugate-adj.js +53 -0
  8. package/src/01-one/conjugate/conjugate-verb.js +145 -0
  9. package/src/01-one/conjugate/deconjugate.js +178 -0
  10. package/src/01-one/conjugate/index.js +13 -0
  11. package/src/01-one/conjugate/kana.js +38 -0
  12. package/src/01-one/conjugate/tags.js +85 -0
  13. package/src/01-one/conjugate/verb-class.js +105 -0
  14. package/src/01-one/lexicon/_data.js +30 -0
  15. package/src/01-one/lexicon/api.js +61 -0
  16. package/src/01-one/lexicon/lexicon.js +163 -0
  17. package/src/01-one/lexicon/misc.js +115 -0
  18. package/src/01-one/lexicon/plugin.js +20 -0
  19. package/src/01-one/numbers/api.js +202 -0
  20. package/src/01-one/numbers/kanji-number.js +69 -0
  21. package/src/01-one/numbers/to-kanji.js +66 -0
  22. package/src/01-one/output/compute/dict.js +13 -0
  23. package/src/01-one/output/compute/english.js +13 -0
  24. package/src/01-one/output/compute/root.js +30 -0
  25. package/src/01-one/output/debug/_color.js +16 -0
  26. package/src/01-one/output/debug/index.js +24 -0
  27. package/src/01-one/output/debug/tags.js +56 -0
  28. package/src/01-one/output/plugin.js +13 -0
  29. package/src/01-one/romanji/api.js +16 -0
  30. package/src/01-one/romanji/compute/index.js +36 -0
  31. package/src/01-one/romanji/compute/kanji-reading/index.js +91 -0
  32. package/src/01-one/romanji/compute/kanji-reading/readings.js +861 -0
  33. package/src/01-one/romanji/compute/kanji-reading/words.js +31 -0
  34. package/src/01-one/romanji/compute/toRomanji/hiragana-map.js +175 -0
  35. package/src/01-one/romanji/compute/toRomanji/index.js +84 -0
  36. package/src/01-one/romanji/compute/toRomanji/katakana-map.js +128 -0
  37. package/src/01-one/romanji/plugin.js +7 -0
  38. package/src/01-one/tokenizer/methods/join-numbers.js +32 -0
  39. package/src/01-one/tokenizer/methods/join-up.js +66 -0
  40. package/src/01-one/tokenizer/methods/lib.js +66 -0
  41. package/src/01-one/tokenizer/methods/naiive-split.js +88 -0
  42. package/src/01-one/tokenizer/methods/okurigana.js +58 -0
  43. package/src/01-one/tokenizer/methods/terms.js +143 -0
  44. package/src/01-one/tokenizer/methods/trie/build.js +13 -0
  45. package/src/01-one/tokenizer/methods/trie/split-up.js +29 -0
  46. package/src/01-one/tokenizer/methods/whitespace.js +44 -0
  47. package/src/01-one/tokenizer/plugin.js +13 -0
  48. package/src/02-two/preTagger/compute/01-script.js +44 -0
  49. package/src/02-two/preTagger/compute/02-particles.js +82 -0
  50. package/src/02-two/preTagger/compute/03-verbs.js +111 -0
  51. package/src/02-two/preTagger/compute/04-adjectives.js +43 -0
  52. package/src/02-two/preTagger/compute/05-people.js +22 -0
  53. package/src/02-two/preTagger/compute/06-numbers.js +80 -0
  54. package/src/02-two/preTagger/compute/07-dates.js +105 -0
  55. package/src/02-two/preTagger/compute/index.js +52 -0
  56. package/src/02-two/preTagger/plugin.js +9 -0
  57. package/src/02-two/tagset/plugin.js +12 -0
  58. package/src/02-two/tagset/tags/dates.js +58 -0
  59. package/src/02-two/tagset/tags/misc.js +91 -0
  60. package/src/02-two/tagset/tags/nouns.js +131 -0
  61. package/src/02-two/tagset/tags/particles.js +50 -0
  62. package/src/02-two/tagset/tags/values.js +68 -0
  63. package/src/02-two/tagset/tags/verbs.js +93 -0
  64. package/src/_lib.js +2 -0
  65. package/src/_version.js +1 -0
  66. package/src/index.js +82 -0
  67. package/types/index.d.ts +268 -0
  68. package/types/japanese.d.ts +159 -0
  69. package/types/misc.d.ts +92 -0
@@ -0,0 +1,105 @@
1
+ import { iRowKana, eRowKana, godanEnding } from './kana.js'
2
+
3
+ // -る verbs are genuinely ambiguous: 帰る is godan, but 変える is ichidan.
4
+ // when the stem is spelled in kanji the vowel is hidden, so we need word-lists.
5
+
6
+ // 一段 verbs the vowel-heuristic can't see (kanji sits right before the る)
7
+ const ichidan = `見る 着る 似る 煮る 干る 射る 鋳る 居る 出る 得る 経る 寝る
8
+ 生きる 起きる 過ぎる 落ちる 尽きる 飽きる 降りる 借りる 足りる 浴びる 滅びる 錆びる
9
+ 感じる 信じる 禁じる 命じる 応じる 通じる 生じる 存じる 論じる 演じる 転じる 案じる 講じる 恥じる
10
+ 老いる 用いる 報いる 強いる 悔いる 延びる 伸びる 帯びる 詫びる 綻びる 懲びる 出来る
11
+ みる きる にる でる える ねる いる いきる おきる すぎる おちる おりる かりる たりる あびる`.split(/\s+/)
12
+
13
+ // 五段 verbs that *look* ichidan (an i/e-row kana sits before the る) but aren't.
14
+ // mostly matters for the kana spellings - kanji spellings already default to godan.
15
+ const godanRu = `帰る 返る 入る 要る 走る 知る 切る 限る 減る 練る 照る 滑る 握る 焦る
16
+ 脂ぎる 覆る 遮る 罵る 湿る 茂る 参る 交じる 混じる 陥る 侮る 嘲る 憚る 滾る 捻る 抓る 契る 齧る
17
+ 喋る 縋る 蘇る 甦る 詰る 罷る 迸る 阿る 熱る 散る 蹴る 耽る ふける
18
+ かえる はいる はしる しる きる かぎる へる ねる てる すべる にぎる あせる ちる
19
+ まじる しゃべる かじる ひねる くつがえる さえぎる ののしる しめる しげる まいる おちいる
20
+ あなどる あざける はばかる なじる まかる ほとばしる ほてる ちぎる よみがえる すがる つねる
21
+ たぎる おもねる いじる ける よぎる まざる ねじる
22
+ 打ち切る 思い切る 張り切る 立ち返る 生き返る 寝返る 立ち入る 押し入る 気に入る 見入る 恐れ入る`
23
+ .split(/\s+/).filter(w => /る$/.test(w))
24
+
25
+ let isIchidan = new Set(ichidan.filter(w => /る$/.test(w)))
26
+ let isGodanRu = new Set(godanRu)
27
+
28
+ // verbs with a paradigm of their own
29
+ const irregular = {
30
+ 'する': 'suru',
31
+ '為る': 'suru',
32
+ 'くる': 'kuru',
33
+ '来る': 'kuru',
34
+ 'ある': 'aru',
35
+ '有る': 'aru',
36
+ '在る': 'aru',
37
+ '行く': 'iku',
38
+ 'いく': 'iku',
39
+ '逝く': 'iku',
40
+ '往く': 'iku',
41
+ '問う': 'ou',
42
+ '請う': 'ou',
43
+ '乞う': 'ou',
44
+ '下さる': 'aru5',
45
+ 'くださる': 'aru5',
46
+ 'なさる': 'aru5',
47
+ '為さる': 'aru5',
48
+ 'おっしゃる': 'aru5',
49
+ '仰る': 'aru5',
50
+ 'いらっしゃる': 'aru5',
51
+ 'ござる': 'aru5',
52
+ '御座る': 'aru5',
53
+ }
54
+
55
+ /** which conjugation-family does this dictionary-form belong to? */
56
+ const verbClass = function (dict, hint) {
57
+ // an irregular is irregular even when the word-list calls it godan - 行く
58
+ // is listed as a godan verb but its て-form is 行って, not 行いて
59
+ if (irregular[dict]) {
60
+ return irregular[dict]
61
+ }
62
+ if (hint === 'Ichidan' || hint === 'Godan') {
63
+ return hint.toLowerCase()
64
+ }
65
+ // an explicit listing beats any compound-guess - 出来る ends in 来る but is
66
+ // an ordinary ichidan verb, not a compound of 来る
67
+ if (isIchidan.has(dict)) {
68
+ return 'ichidan'
69
+ }
70
+ // -する compounds, like 勉強する
71
+ if (dict.length > 2 && dict.endsWith('する')) {
72
+ return 'suru'
73
+ }
74
+ // -来る compounds are always て-form + 来る: 持って来る, やって来る
75
+ if (dict.length > 3 && /[てで](来る|くる)$/.test(dict)) {
76
+ return 'kuru'
77
+ }
78
+ let last = dict[dict.length - 1]
79
+ if (!godanEnding.has(last)) {
80
+ return null // not a shape we can conjugate
81
+ }
82
+ if (last !== 'る') {
83
+ return 'godan' // う/く/ぐ/す/つ/ぬ/ぶ/む are unambiguous
84
+ }
85
+ if (isIchidan.has(dict)) {
86
+ return 'ichidan'
87
+ }
88
+ if (isGodanRu.has(dict)) {
89
+ return 'godan'
90
+ }
91
+ // derived stems keep their ichidan shape - 食べさせる, 読まれる, 書ける
92
+ if (/(せる|させる|れる|られる)$/.test(dict) && dict.length > 2) {
93
+ return 'ichidan'
94
+ }
95
+ let before = dict[dict.length - 2]
96
+ // an i-row or e-row kana before る is a good ichidan signal
97
+ if (iRowKana.has(before) || eRowKana.has(before)) {
98
+ return 'ichidan'
99
+ }
100
+ // ..otherwise assume godan, the larger class
101
+ return 'godan'
102
+ }
103
+
104
+ export default verbClass
105
+ export { isIchidan, isGodanRu, irregular }
@@ -0,0 +1,30 @@
1
+ // generated in ./lib/lexicon
2
+ export default {
3
+ "City": "true¦0:3O;1:54;2:3U;3:4P;4:4I;5:3P;6:38;あ58い56う54えび53か52さ51たつ53つ4Zにかほ市,ひたちなか市,ふじみ1み4Yむつ市,一4X七尾市,三4W上4U下4T世田谷区,中4Q串4P丸亀市,丹波4N久4L亀4K二4I五4H井3交1京4G人吉市,今治市,仙4F伊4B会津若4J佐4A倉49備48光市,入4P八45出44函館市,刈43別42前41加3Z勝3Y北3S匝瑳市,十3R千3P半0南3M印3L厚3K取3J古3I可児市,台東区,各務3合3H吉3G名3F向日市,君6吹0呉市,周3D和3C品3B唐6善通3A喜多39嘉麻市,四37国36土33坂32垂35城陽市,堺市,塩31境港市,墨3Q士30壱岐市,夕張市,多2Y大2T天2S太2R奄美市,奈2Q奥3X妙高市,姫2P姶2Q嬉1宇2N守2M安2K宍粟市,宗像市,宜野湾市,宝2J室2I宮2G宿毛市,富2E寒河2D寝屋2対3O射35小2B尼2A尾28山27岐阜市,岡26岩25岸和0島24川23市22帯広市,常20平1Z幸3J広5庄3府中市,座4P延1Y廿日38弘48弥富市,彦1X御1W徳5志1V恵1U愛3L成0我孫46戸0所29指宿市,掛2摂6敦1T文京区,新1S日1R旭4R明1Q春日1P昭5曽於市,有0朝1O木1N本1M札幌市,杉並区,村1L東1I杵築市,松1H板橋区,枕2A枚39柏4D柳1G栃3K栗1F根室市,桐生市,桑1E桜1G桶2横1D橋1C橿3歌志1B武19気仙3N水18氷2Z江17池0沖縄市,河内長1沼16泉15津14洲1C流4浅口市,浜13浦12海11淡2P深10清0Z渋0Y港区,湖0X湯29滑2滝0W潟上市,潮来市,瀬戸0V焼6熊0U熱海市,燕市,牛久市,牧之3犬4狛2D狭4玉0T珠洲市,瑞0S生駒市,田0R由0Q甲0P男0O町0留萌市,登0N白0M益0盛1Y目黒区,直39相0L真0K矢板市,知0J石0I砂2砺波市,碧3D磐0神0H福0G秋0秦1秩0F稚1B稲0E立2竹24笛吹市,笠0D筑0C箕面市,米0B糸0A紀の2紋30結3T網走市,綾09総社市,練馬区,美07羽06習志1胎1B能05臼杵市,舞鶴市,船41芦04花巻市,苫小牧市,茂3茅03茨3K草02荒01菊00萩市,葛Z蒲郡市,蓮0蕨市,薩摩川1B藤Y行X袋2C袖ヶ浦市,裾1西W見附市,観音3A角0調布市,諏訪市,諫早市,豊U貝2J赤T越S足R輪5近江八幡市,逗46遠1那P郡1L都O酒0野N金29釜1Q釧2P鈴0O鉾0銚46鎌M長K門真市,関市,阪3D防42阿J陸前高0雲I霧5青H静1Y韮2A須G飛騨市,飯F養0F館E香D駒ヶ1X高C魚B鯖2D鳥A鳴門市,鴨2鴻巣市,鶴9鹿8黒7龍ヶ2A;石市,部市;児5屋市,島市,嶋市,沼市,角市;ヶ5岡市;取市,栖市,羽市;沼市,津市;山市,岡市,島市,崎市,松市,梁市,槻市,浜市,知市,石市,砂市,萩市;南市,取市,美市,芝市;山市,林市;塚市,山市,田市,能市;坂市,崎市,賀2;梅市,森市;仙市,南市;久1K南市,波市,蘇市,賀1;久35井市,岡7崎市,浜市,野市,門市;京市,市;ヶ3N倉市;々2R洲市,田市;城市,留市;珂48覇市,須7;塩3烏4;利市,立区;前市,谷市;平市,磐市,穂市;中市,前市,岡市,島区,川市,後7明市,橋市,田市,見35;大1高0;之表市,予市,宮市,尾市,条市,東京市,海市,脇市,都市;方市,橋市,田市;井2I岡市,枝市,沢市;城市,飾区;川市,池市;尾市,川区;加市,津市;ヶ1D野市;別市,屋市;代市,美市;咋市,島市,曳1村市,生市;作市,唄市,濃7祢市,馬市;加茂市,市;瀬市,部市;島市,満市,魚2;原市,子市,沢市;後市,紫1西市;岡市,間市;城市,敷市,沢市;父市;井市,山市,岡市,島市,津市,生市,知4;埼市,戸市,栖市;垣市,岡市,巻市,狩市;多市,立市;岡市,庭市;模3生市,馬市;井市,山市,岡市,河市,石市;別市,米市;鹿市;州市,府市,斐市,賀市;利本荘市,布市;原市,川市,村市,辺市;浪市,穂市;名市,野市;本市,谷市,野市;内市,市;川市,沢市;南市,西市;川市,谷区;瀬市,須市;川市,谷市;南市,津市,老J;安市,添市;松市,田市;久11山市,島市,市;佐1南市,大6;津市,田市;別市,南市,戸1A東区,津市,田5;俣市,戸市;蔵7雄市;村4野市;内市;本市;手市,浜市,須M;名市;原市,東市;井市,川市;原市,山市,戸市,本市,江市,浦市,阪市;かがわ市,久留2A京特別区部,大8広5御市,村4松7根市,海市,温市,近01金市;山市,島市;和市,阪市;上市,山市;宮市,巣市,庄市;更6津2;倉市,来市,霞市;井市,市,部市;石市;光市,南市,向市,田市,立市,置市,進市,野市,高市;城市,宮市,宿区,居浜市,庄市,座市,潟市,発0見市;賀市;庭市,那市;布0S摩市,木市;前K坊市,所市,殿場市;根市;岡市;塚市,川市,戸市;滑市,総市,陸7;大T太0;原市,川市;口市,崎市,西市,越市;原市,田市;倉市,出市,国市,沼市,見A;山市,崎市,谷市;口市,形市,梨市,武市,県市,陽小野0鹿市;張旭市,花7道市,鷲市;沢市;崎市;千0Y城市,山市,平市,松C林市,樽市,浜市,牧市,田3矢部市,美玉市,諸市,郡市,野市,金7;井市;江市;士7山市,岡市,津市,田林市,良1谷市,里市;吉0宮市,市,見市;古7崎市,津市,若市;島市,市;戸市,蘭市;塚市;中市,城市,曇1来市,芸7;市,高0;口市,山市,谷市;佐市,和5土市,城市,治市,部市,都7陀市;宮市;路市;良市;宰0H田市;理市,童市,草市;仙市,分市,和A垣市,崎市,川市,府市,月市,村市,東市,津市,洲市,牟0田9町市,竹市,網白0R船渡市,野8阪7館市;市,狭4;城市,市;区,原市,市;市,郡4高0;久市,摩市,治7賀01;見市;別市;尻市,竈市;井市,出市,戸市,東市;佐7岐市,浦市;市,清7;水市;分A東市,立市;万十市,国中央市,日7條畷市,街道市;市市;方市;寺市;川区;光市,歌4泉市;南市;津市;取市,古N寄市,張市,護市;川市,野2;志市;河市,賀市;手市;木市;西市;あわじ市,さつ0Pアルプス市,丹市,九H国市,城市,島3房総市,相8砺市,足柄市,陽市,魚7;沼市;馬市;代7曲市,歳市,葉市;田区;和0日町市;上市,九B区,名古A広5斗市,本市,杜市,秋0茨7見市;城市;田市;島市;屋市;州市;山市,浦市;古2東市,茂市,西市,賀市,須市;川市;橋市;府市;谷市;水市,雲市;代市,千代市,女市,尾市,幡8戸市,潮市,王7街市;子市;市,平市,浜市;前市;吉市,敷市;世保市,久市,伯市,倉市,渡市,賀市,野市;万9丹市,予市,佐市,勢8東市,豆7賀市,達市,那市;の国市,市;原市,崎市,市;里市;北市,台市;丹後市,田辺市,都市;島市,所川3條市,泉市;戸市,本7;松市;山市,岡市;喜市,慈市,留7;米市;市,篠4;山市;間市;央8津7野8間市;川市,市;区,市;呂市,妻市,松市,田市,野市,関市;天草市,尾市,山市,田市,越市,野3;原市;原市,好市,島市,木市,条市,次市,沢市,浦市,田市,笠市,豊市,郷市,鷹市;宮市,関市;どり市,やDよし市;がる市,くば7;みらい市,市;いたAくEぬC;すみがうDほく市;の市;きは市,る7;ま市;すみ市,ちき串木1なべ市,わ7;き市;きる1ま市,わ7;ら市;野市",
4
+ "Country": "true¦0:17;1:1F;ア15イ11ウ0Xエ0Vオ0Sカ0Qガ0Oキ0Mギ0Kク0Hグ0Gケ0コ0Dサ0Bザン0Pシ0Aジ09ス04セ01ソZタYチXツバル,デンマWトUドSナRニQネパ0Rノルウェー,ハPバOパMフKブIベHペルー,ホンジュラス,ボGポFマEミDメキシコ,モ9ヨル05ラ8リ7ル6レ5ロ13中4北3南2台湾,日本,東ティモ0R沿ドニエストル,西サハラ,赤道ギ0韓国;アフ1Aオセ0Hスー04;キプ0L朝鮮;国,央アフリカ共0C;ソト,バノン;クセンブルク,ワ0Vーマ0;トア0ヒテンシュタ02ビア,ベ13;オス,ト0I;ザンビOナコ,ル4ロッコ,ン3ーリ2;シャス,タ0;ゴル,テネグロ;ディブ,ドバ;クロネシア0Yャンマー;ケドニア旧ユーゴスラビア共02ダガスカル,ラウイ,リ,ルタ,レー0Qーシャル06;ルトPーラ1;スニア・ヘルツェゴビナ,ツワナ,リ0A;トナム,ナン,ネズエラ,ラルーシ,リーズ,ルギー;ラジル,ル2ー0X;ガ0Rキナファソ,ネイ,ンジ;ィ2ランス;ジー,リピン,ンラ1;キス0Tナマ,プアニューギ0ラ2レスチナ;オ,グ0C;チカン,ヌアツ,ハマ,ルバドス,ングラデシュ,ーレ07;イチ,ンガリー;ウエ,カラグア,ジェ02ュージーラ1;イジェ0Jウル,ゴルノ・カラバフ,ミZ;イツ,ミニカ2;共N国;リニダード・トバゴ,ル2ンガ,ーゴ;クメ0Jコ;ーク;ェコ,ャド,ュニ0Gリ;イ,ジ02ンザ0;マリ2ロモンL;ア,ラ1;ネ3ルPント2ーシェル;クリストファー・ネイビス,ビンセントおよびグレナディーンIル02;ガル;イス,ウェーデン,ペ5リ4ロ3ワジラ1ー2;ダン;バキア,ベ0;ナム,ランカ;イン;ブチ,ャマイカ,ョー04ンバブエ;エラレオネ,リア,ンガポI;ウジアラFモア,ン2;トメ・プリンシペ,マリノ;スタZソボ,モロ,ロンDンゴ2ートジボワF;共2民主共2;和国;アテマラ,レナダ;ウェート,ック3ロア2;チア;諸島;ニア2リシャ;!ビサウ;プ2ューバ,リバス,ルギス;ロス;イアナ,ボン,ン2ーナ;ビア;ザフスPタ2ナダ,メル5ンボNーボベルデ;ール;マ3ラ9ースト2;ラHリア;ーン;クア2ジプト,スト0チオピア,リトFルサルバ2;ドル;ガ4クライナ,ズベ3ルグ2;アイ;キスG;ンダ;エメン,ギリス,スラエル,タ9ラ4ンド2;!ネ2;シア;ク,ン;イBゼルバイジャン,フガ9ブハ8メ7ラブ首長国6ル3ン2;ゴラ,ティグア・バーブーダ,ドラ;ジェ3ゼンチン,バ0メ0;ニア;リア;連邦;リカ;ジア;ニス2;タン;スラ1ルラ1;ンド",
5
+ "Noun": "true¦あ0Sお0Rか月,き0Qことし,ご飯,つ,イ0Pウォン,カ月,キロ0Mグ0Oコップ,セ0Pトン,ドル,パ0Lペ0Kポンド,ミリ,メー0Nユーロ,リッ0Nヵ月,ヶ0J一0H上,下0G世0F両親,中0E予定,事0D二人,人0C今0B令和,件,休み,会社0A位,住所,体,個09倍,値段,側,傘,元,兄,先08光,八百屋,公園,内,円,冊,再来07写真,冬,分06切05初旬,前04割,匹,医者,午03単語,博物館,卵,原因,去年,友達,口,台02右,号,名01味噌,品,問題,喫茶店,回09図書館,国,地00場所,塩,声,夏,夕Z外,夜,夢,大Y天気,夫,奥,女X妹,妻,姉,娘,子供,季節,学W客,室,家V宿題,対,封筒,尾,山,島,川,左,市,席,帽子,平U年T店0A度,庭,弁当,弟,当日,形,後ろ,御飯,心,息子,意味,戸,所S扉,手R才,指Q授業,教P数,文O料金,新聞,方N日M明L映画館,春,昨K昭和,昼J時I晩ご飯,月,服,朝J本H机,村,束,来07杯,枚,果物,棟,森,椅子,横,橋,正G歯,歳,母,毎F気E水,池,泊,海,消しゴム,深夜,湖,漢字,火,点,為,父,片仮名,牛乳,物,珈琲,理由,瓶,生徒,田舎,男X町,畑,番09病院,発,皆D皿,目,看護師,県,真C眼鏡,着B砂糖,社長,祖A秋,秒06税金,空9窓,章,端,筆,答え,箇0J箱,箸,米,粒,紀元前,紙,組,結果,絵,美術館,羽,翌0I考え,耳,肉,肩,背中,腕,腹,自8船,色,苗字,英語,茶碗,荷物,葉書,街,袋,西暦,規則,角,言7計画,試験,話,課,財布,赤ちゃん,足,車,軒,辞書,辺り,近く,通6週5道4違い,遠く,部3郵便局,都市,酒,醤油,野菜,量,金,鉛筆,銀行,銭,鍵,間,階,隣,隻,雑誌,雨,雪,雲,雷,電車,面,靴,鞄,韓国語,音,頁,頭,顔,風2飛行機,食1飲み物,首0駅,魚,鼻;!都;べ物,堂;!呂;!屋,長;!路;!末,間;!り;葉,語;動車,転車;!港;母,父;!物;ん中,夜中;!さん;!持ち;年,日,晩,月,朝,週;午,月;!屋,日;!計,間;!ご飯;夜,年,日;後日,日,治;!本語,間;!法;字,法,章;室,科書;!輪;!紙;!為;!間,齢;仮名,成,日;!族;校,生;!性;人,学,正;べ,方;下鉄,図,震;!前;!所;前,後;!日;れ,手;!間;年,月,週;月,生,週;!目;!員;!夜,年,日,晩,月,朝,週;!々,目,間;!務所;!国語,旬;界,紀;!旬;昨0緒;年,日;!月;ン,ージ;ン,ーセント;!グ1メー0;トル;ラム;ンチ;のう,ょう;ととい,客さん,茶,金;さって,した,す",
6
+ "Date": "true¦あ8おととい,き7ことし,一昨6下旬,中旬,今5先4再来3初旬,前日,去年,夕べ,平日,当日,明2昨1本日,来3正月,毎0翌6週末;年,日,晩,月,朝,週;夜,年,日;後日,日;年,月,週;月,週;夜,年,日,晩,月,朝,週;年,日;のう,ょう;さって,した,す",
7
+ "Time": "true¦夕方,夜,昼,朝,正午,深夜,真夜中",
8
+ "AmPm": "true¦午0;前,後",
9
+ "Season": "true¦冬,夏,春,秋",
10
+ "SuruVerb": "true¦中止,予約,仕事,会8使用,修理,出発,判断,利用,到着,努力,勉強,参加,反対,報告,増加,変7失敗,契約,安心,完成,実6対応,延期,建設,影響,復帰,心配,想像,感謝,成5我慢,投票,招待,掃除,提供,改善,散歩,料理,旅行,期待,案内,棄権,検討,決定,注4洗濯,活動,減少,準備,理解,生活,用意,発3相談,研究,確認,移動,管理,約束,納得,紹介,終了,経験,結婚,緊張,練習,考慮,製造,解決,記憶,評価,認可,説明,調査,議論,販売,買い物,賛成,質問,輸2返事,連絡,逸脱,運1遠慮,選択,開0関係,電話;始,発;動,営,転;入,出;明,表,見,言;意,文;功,長;現,行;化,更;話,議",
11
+ "Pronoun": "true¦あJおHかFきDこCしょうせい,じぶん,そCてBへいIぼく,やつ,わ7俺6僕,儂,其奴,吾,小生,弊社,彼5御4我2手前,此奴,私1自分,貴0;下,女,官,方,様,男,社;!たち;!々,が0等;!社;宅,社;!女,奴,等;!様;が2し,た1て,れ0;!ら,われ;くし,し;!しゃ;まえ,めえ;いつ,やつ;か0さま,しゃ,み;!ん;のじょ,れ0;!ら;いら,たく,まえ,ら,れ,ん0前,宅;しゃ;いつ,た1なた,の0やつ,んた;かた,ひと,人,方;い,くし,し",
12
+ "Adverb": "true¦0:0W;あ0Tい0Iお0Hか0Eき0Dくする,けっ0Cこ0Bごとき / ごとく / ごとし,さっき,し0Aじゅう09す07ず06ぜ05そ04た01だZちょYつXできるだけ,とWどTなSのんびり,はOばかりに,ひNびMふLべつに~0ほKまGみFむしろ,めったにEもDやBゆMよAわりと,一9丁度,万一,主に,今に0S以8全7再び,初R別6前に,割と,十分,大5実に,少4後で,必ず,急に,意外,敢えて,早く,時々,普2最後に,本当に,果たQ案の定,極R決してE特に,直接,相当,真っ直ぐ,突然,約,結1絶対,色々 ,間に,非常に;局,構;段,通1;! ;し,すこし;丈夫,体,分,変;々に,に~0;く~0然,部;上に,外;人,体,層,度に,応,旦,気に,番,種;うやく,く;っ1はり;と,ぱり;う,しかしたら,っと,はや;!~0;たIんな;あまあ,えに,すます,ず,だ3っ2でに,る1んいち;っ8で;すぐ,たく~0;!しも,~ていません;とんど,んと03;たHつう,と;っくり;じょ00とり;じ3た2っ1やく;きり;して;めて;かなか,るべく;う2ん1;どん,なに~W;!してXせ,にも~0やら;うとう,きどき,ても;いに;うど,っと;い1んだん;じょうぶ,ぶ;い2くさん,しかに,び1ぶん,まに;たび;して,てい;こそこ,ろそろ;ひ,んぜん;い3っと;ぐ1こし,っかり,でに;!に;ぶん;ばしば,ょっちゅう;う,とごとく,れから;きょく,こう,して~0;っと,ゅA;た2つて,な1何か;にか,らず,り;がた,わら;そらく,よそ;か9がい,きなり,く6じょ5ち4っ1つも,まにAろいろ;きに,し2そう,た1ぱい;い,ん;ゅ,ょに;おう,どに,ばん;うに;つ,ら1;!~1;ても;が,に1;!も;いだに,えて,くまでも,とで,まり2らかじめ,ん1;のじょう,まり;!にも,~0;ない",
13
+ "Adjective": "true¦0:06;あ03い02う01え00おWかVきUくYこわい,さTしQすOずNせまい,たMだLちJつHていねい,とおい,なGにGぬNねTはFひEふDほCまAみ9む8めずら0もったい04や7ゆうめい,よ6わ5上手い,不味い,丸い,低い,偉い,優0円い,冷I凄い,危04厚い,厳0古い,可愛い,喧0四角い,固い,塩辛い,多い,大4太い,好ま0嬉0安い,寂0寒い,小K少04広い,弱い,強い,忙0怖い,恐ろ0恥8悔0悪い,悲0惜0惨い,慌ただ0懐か0新0早い,明N易0暑い,暖07暗い,望ま0柔ら07楽0欲0正0汚3浅い,涼0深い,温2激0濃い,熱い,狭い,珍0甘い,疑わ0痛い,白い,相応0眠い,眩0短い,硬い,素晴ら0細い,緩い,美1肌寒い,良い,若い,苦B荒い,薄い,親R詰まら04詳0貧0賢い,赤い,軽い,辛い,近い,速い,遅い,遠い,酷い,酸っP醜い,重い,鈍い,鋭い,長い,難0青い,面白い,頼も0騒が0高い,魅力の04黄色い,黒い;しい,味0;い,かい;い,ら0;きい,人0;かい,るい;い,わい;さ0すい,ばい,わら00;ずか0;じYにくい,りょくのV;ず1るい;い,しい;しい,そい;とい,るい;くい,どい,ろい;だざEやい;がい;まらNめ1よい,らい;たい;い1かい;さい;さい,るい;かい,だ0の0;るい;くGごい,ず0っ1ばら0;ぱい;おかAか2た1ろい;しみやすい;くい,たC;むい;い4たAつい;たい,な0らい,るい,わいい;い0お3そい,とな0も1;い,し1;ろい;い,きい;らい;すい,つく0まい,れ0;い,そが0たい;おい,か5た2つい,ぶ1まい,らい;ない;た2ら0;しい;かい;い,るい",
14
+ "AdverbialParticle": "true¦く1ぐ1ずつ,だけ,とか,な0ばかり,ほど,やら;ど,んか;らい",
15
+ "NaAdjective": "true¦あCいBおAかんたん,がんこ,き9げんき,こ8さいわい,ざんねん,し5じ3す2せいBなめ1にぎDひま,ふくざつ,へ0べんり,まじめ,みりょく7丁寧,丈夫,上手,下手,便利,元気,危険,変,大嫌い,奇麗,好き,嫌い,孤独,安全,平均的,幸い,新鮮,暇,有名,正常,残念,滑1無料,異常,真面目,社交的,簡単,素敵,綺麗,色々,複雑,親切,賑D重要,静か,頑固,高価,魅力的,鮮D;いきん6た,ん;らか;き,てき;ゅうよう,ょう0;ず,ぶ;ずか,ゃこう1んせ0;つ,ん;てき;うか,どく;けん,らい,れい;かねもち,金持ち;じょう;ざ0んぜん;やか",
16
+ "Conjunction": "true¦あ0Wい0Vお0Oか0Mぎゃくに,こう0Nさ0Kし0Fじゃ0Eす0DそYたVだRちなQってか,つNてMでJとGど04なBにもかかわらず,のため,はんめん,ふんAほ7ま6も4ゆ00よ0Hわけ02んA一方3並びに,乃至,亦,但X併0X例W即ち,又F及び,反面,同0Q否,因Q実は,尚,尤も,従0H恐0R惜し0T或2故に,本当は,次1然し0若し0U譬W追0H逆に;!な0R乍ら;いで,に;いは,は;!で;し0っとも,また;!くは;してや,ずは,た8;な1ん0;じゃ,で,なら;!ら;じゃ;いし3お,かん2ぜなら,の1ら0;ば,びに;で,に;ずく,づく;!は;いうのも,ころ1す04も0同時に;あれ,す03に;が,で;す1な0は;いと,け00;から,が,けれど;か,ゆーか;い1ま0;り,るところ;ては,で;みに;から2が,け1って,とす0;ると,れば;ど,れども;!こそ,といM;だ1と0め;えば,へば;!し;うAこで,しCの8もそも,やさかい,りゃ,れ0ーいや;から,だPで6と5ど4な3に1も,ゆ0;えに;!し0;ても;のに,ら;ころか;!も;!いて,は,も;うえ0上,後;!で,に;い2し1す0ですが,な0;ると;たら,て;えば,や;なわち,ると;!が;か2た0;が0ら;って;し0も;!な8;て,もなけ0らに,りとて,れど;れば;く0たや,つ;して;し4そ2な1ま0よび;けに;じく;れな0;がら;むら0;くは;え,っぽう,や;るいは,わ0;せて",
17
+ "Expression": "true¦あ0Vい0Tう0Qえ0Nお0Gきゃ0Fぎ0Cぐふ0Bげっ,こ06ご03さ01ざまあみろ,じゃ0UすZそXただいまWどRなNねぇ,はMひ0KふLへIほHまGもしもし,やFよAわ9ア7ウ6オヤスミ,ガ5キャ4コンニチワ,ゴメン,サヨナラ,デヘヘ,トホホ,ハッハッハ,バカヤロー,ヒヒヒ,フ3メリークリスマス,モシモシ,ヤ2ヨロシク,ワ1南無,嗚呼,御0有難う;意,馳走0I;ァー,ーッ;ダー,ッター,レヤレ;ェ1ムフム;ッ,ー;ーン;ヒャー,ーン,~ン;ッ0ハハ,リガトウ;カンベー,プップ~;ぁZあ,っ,んわん,ーい;い3う2お,くもまあ,し1っ0ーし;こら2しゃ;っ,ゃ;こそ,し;しょ;ぁ,あ,れやれ;ぁ,あS;う,んと;え1ー0;え,っ;え,ッ,ー;うん,ふふ,むふむ,ん,ーん;い,じめ8っ,てな,ーい;あ2む,るほど,ん0;てこった,と0;!まあ,もはや;に,んだ;う2っこい1れどれ,ー0;ぞ,も;!しょ;いたし0ぞ,も;まして;!ッ;う0らそら,れ;!ですね,ね;い0まん,み0ん0;ません;ぁ,あ7てと,よ0らば;うなら,なら;きげんEくろうさん,ちそうFっつぁん,めん1苦労さ0馳走F;ま,ん;!くだGなG;ら3りゃ2れこれ,ん0;にち0ばん0;は,わ;!ー;!ぁ;!っ;ゃ1ょ0;!い,ぎょ;あ,ふん;あ,ー;!い,ぉ,お,かえり4ぎ3そまつ2っ,つかれ様,は1めでとう,や0ーい,早う,疲れ2粗末2;!すみ3っ;よう;さま,様;ゃー;!な0;さい;え1っ,ー0;っ,ッ;!い;うん,ふ1わ,ん,ー0;む,ん;!っ,ふ;いえ,えいえ,ただきます,や0ーえ;ぁ,あ,ー;ぁ,あ,いた,かん6きまへん,っ5ら4り1れ0ーあ;!よあれよ,れ,ー;がと1ゃ0;!りゃ;!う;!ッ,ー;!かんべー;!べ",
18
+ "Value": "true¦〇,いつつ,ここのつ,とお,ななつ,ひとつ,ふたつ,み1む1や1よ1一0七0万,三0九0二0五0京,仟,伍,何,佰,億,兆,八0六0十,千,参,四0壱,弐,拾,捌,漆,玖,百,肆,萬,陸,零;!つ;っつ",
19
+ "WeekDay": "true¦土0日0月0木0水0火0金0;曜日",
20
+ "Godan": "true¦0:1A;1:10;あ19い16う14えらぶ,お12か0Zがんばる,き0Yく0Wけす,こ0Vござる,さ0Tし0Sす0Rそ0Qた0Pだ0Oち0Nつ0Kてつだう,と0Jな0Hねむる,の0Gは0Fひ0Eふ0Dへる,ほる,ま0Cみ0Bむすぶ,も0Aや09よ08わ07上06下05並ぶ,乗る,乞う,乾04争う,仄め03付き合う,仰0U企む,休む,会う,伴う,住む,作る,使う,侍る,保つ,倒す,偽る,傾く,働く,儲01光る,入る,冗談る,写す,冷や00凝Z出Y分01切る,刺す,刻む,削る,剥ぐ,劣る,助01励X効く,動く,勝つ,匂う,包む,参る,及ぶ,取V口説く,叫ぶ,可愛06叱る,合う,向かう,含む,吸う,吹く,味わう,呼U咲く,商う,問う,喋る,喜T嗅ぐ,噛む,回る,困る,囲む,固0在る,基づく,塗る,増S壊す,売る,変18外す,太る,好む,始0威R嫌06学ぶ,守る,実る,寄る,富む,導く,就く,届く,履く,崩す,巻く,帰る,干す,広Q庇う,座る,建つ,引O張る,強0弾く,役N往く,待つ,従う,忍ぶ,志す,怒る,怖06思L急ぐ,恨む,悩む,悲K惜K憎む,憩う,戻1手伝う,打つ,払う,扱う,抜く,抱く,押す,担ぐ,招く,拾う,持つ,挟む,捻る,掘る,掛01探1掴む,揃う,描く,握る,撮る,救う,散る,敷く,断る,暖0暮Z曇る,曲06書く,有る,望む,枯Z楽K構う,次ぐ,欲し06歌う,止0歩く,死ぬ,残1殴る,殺す,気J污す,決0沈む,沸04治1沿う,泊0泣く,注ぐ,泳ぐ,洗う,流行る,浮かぶ,消す,涼む,混じる,添う,済む,減I渡1温める,湿る,満たす,溶03滅ぼす,滑る,漏Z潤う,為0X無くH焦る,焼く,熟す,狂う,現す,生G産む,異F畳む,疑う,痛む,登る,盗む,目N直1眠る,眩む,着く,睨む,知E砕く,磨く,示す,祈る,祝う,祭る,移す,稼ぐ,積む,空く,突く,立つ,笑う,終18組む,経つ,結ぶ,継ぐ,続く,練る,縋る,縛る,縫う,縮む,繰り返す,置く,罵る,群06習う,耽る,聞く,育つ,脂ぎる,脱ぐ,腐る,至る,舞う,苦K茂る,落とす,蘇る,行D表す,被る,補う,襲う,要る,覆る,見C解く,触る,言A試す,話9誇る,誘う,語る,誤る,読む,請う,謝る,譲る,負03貰う,買う,貸す,賄う,走る,起こ1越す,足す,踊る,踏む,蹴8転7輝く,込む,返1迷う,追6送る,這う,通5逝く,進む,遊ぶ,運ぶ,過ごす,違う,遣る,適う,遭う,遮る,選ぶ,配る,酔う,重F釣る,閉0開く,間4関18防ぐ,降3限る,陥る,隠す,集0離す,霞む,静0響く,頂く,頑R頼2願う,飛U食い違う,飲む,飼う,飾る,馴染む,騒ぐ,騙す,驚く,高0魂消る,黙る,齧る;む,る;る,ろす;にZ違う;う,す,る;いかける,う;がる,ぶ;る,飛ばす;しUす;い2う;ふP出す,表す;つQ做す,張る,習う,送る,逃す;く,なう;りPる;なる;む,やす;す,なる;らす,る;付く,遣う;しむ;い2う;つく,出す;立つ;く,っ2;張る,越す;がる,まる;張る;す,やす;ばす,ぶ;び3ぶ;り2る;出す;ます,む;す,会う;らす;かす,す;かる;合う;かす;かす,く;がる,さる;がる;かる,た1;ぶ,む,る,ろこぶ;く,すむ;つ,どる,らう;がく,のる;いる,がる,く,じる,つ,なぶ,もる,よう,わる;く,ける,せぐ,とる,やす,る;かる,く,ねる,らく;こぶ,しる,じ0たらく,なす,る;こる,ぼる,む,る;おす,く,ぐる,さる,やむ,ら2;う,ぶ;おる,ぶ,まる,る;か3く,づく,な2む,る;がる,ぐ;う,む;がう,ぢむ,る;く,す,まる;つ,のむ;そぐ,だつ;う,すむ,む,わる;かる,ぬ,ばる,まう,めす,ゃべる;がす,く,けぶ,そう,わ2;ぐ,る;のむ,まる,む,ろぶ;さる,だ2もる;さる;く,まる;う,え1か2ぎる,ざる,じる,す,せぐ,ぶる,む,よう,わる;る,わる;す,る;く2こる,す,っ6とる,どる,もう,よぐ,わる;!る;ごく,たう,つ2む,る;!す;う,く,そぐ,つ3のる,らっ2;しゃる;わる;せる,つ0らう,る2;!く;まる",
21
+ "IrregularVerb": "true¦くる,する,来る,為る",
22
+ "Ichidan": "true¦0:0L;1:0K;2:0M;3:06;4:03;undefined,あ0Nい0Mう0Kえる,お0Jか0Gき0Fく0Eこ0Dさ0Cし09す08せ2そだ4た06つ04で02と01なZにYぬ1ねる,のXはWひろVふUほ00まSみRむか0もQやTよPわO上V下V与0並0L乗N交M付03任T企4伏T伝0伸L似る,使0信3倒1借K備0傷つ03優1儲03入1兼ねる,冷J出I分H切1別1加0助03努2勤2占2取G受03呉1告V命3固2埋2報F増0壊1売1変0妨V始2委ねる,存3定2寄T寝る,尋ねる,尽E居る,届03崩1帯L広D延L建4引き受03弱2強C当4得る,忘1応3怠03恐1恥3悔F惚1感3慌4慣1慰2戒2抑0投V折1抜03抱0拵0挙V捨4掛03掲V揃0換0支0攻2教0数0明03晴1暮1曲V替0束ねる,果4枯1案3構0止2比0L求2汚1決2流1浮か0L浴L消0混M済まT溢1溶03滅L漏1演3濡1点03焦V焼03煮る,燃0片付03現1甘0生B用F疲1痩T真似る,眺2着A知らT禁3立4答0経る,続03綻L締2老9考0聞こ0育4腰掛03臥T舐2苦しまT落ちる,蓄0虐2褒2見8覚J解03触1言い7訪6訴0詫L認2調0L論3諦2講3負03責2起E越0足K跳ねる,転3載T迎0述0L逃5通3連1進2遂V遅1過ぎる,避03重ねる,錆L鍛0長03閉2開03間違0降K隠1集2離1震0食0L飽E高2;げる,れる;ねる,れる;つ00換0;える,せる,つZる;いる,ける;る,換0;える,きる,ける,じる,ま1;いる,める;げる,める;きる;いる;り換0れる;か1ける;かPる,来る;える,める;りる;びる;ぜる;せる,り換0;か1ける,す1;ご1せる,わ2;える,と2れる;せる,と2る;か5ける,げる,ぜる;せる;える,る0れる;げる;える,じ2な1れる;が1せる,べる;げる,る;が5げる,める,らQれる;める,れる;ける,げる,ど6める;か5きる,る;ける;か5ける,げる,た0と2よ2れる;える,れる;お1か2ずGてる,べる,りる;てる;ぎる,ぐ1す2てる;める,ら6ん3;じる;せる,べる;ける,げる,さ0だ2める;える,た0わ1;ず1らBれる,わ0;える,こ0める,る,れる;か0く1ける,さ6ぞ0りる,れる,ん5;が0じる;ねる;きる,し0そ1ちる,とず1ぼ0りる,れる;か5ける,ま1める,れる;べる;る,れる;きら2ける,げる,た0つ2てる,びる,ふ1らわ1;れる;える;める",
23
+ "Determiner": "true¦あの,この,その",
24
+ "CaseParticle": "true¦から,が,で,と,に,へ,まで,や,より,を",
25
+ "ConjunctiveParticle": "true¦け2し,た1つつ,て3ながら,の0ば;で,に;ら,り;ど,れど0;!も",
26
+ "TopicParticle": "true¦こそ,さえ,しか,でも,なら,は,も",
27
+ "SentenceParticle": "true¦か3さ,ぜ,ぞ,な2ね1のか,ものか,よ0わ;!ね;!え;!あ;!しら,な",
28
+ "Era": "true¦令和,大正,平成,明治,昭和,紀元前,西暦",
29
+ "AdnominalParticle": "true¦の"
30
+ }
@@ -0,0 +1,61 @@
1
+ import { conjugateVerb, conjugateAdjective, conjugateNaAdjective, deconjugate, verbClass } from '../conjugate/index.js'
2
+ import lexicon, { roots } from './lexicon.js'
3
+
4
+ const isKnown = (w) => lexicon.hasOwnProperty(w)
5
+
6
+ export default function (View) {
7
+ /** every verb in the document */
8
+ View.prototype.verbs = function () {
9
+ return this.match('#Verb')
10
+ }
11
+ /** every noun in the document */
12
+ View.prototype.nouns = function () {
13
+ return this.match('#Noun')
14
+ }
15
+ /** every adjective - both い and な */
16
+ View.prototype.adjectives = function () {
17
+ return this.match('#Adjective')
18
+ }
19
+ /** every 助詞 */
20
+ View.prototype.particles = function () {
21
+ return this.match('#Particle')
22
+ }
23
+ /** every date, time and duration */
24
+ View.prototype.dates = function () {
25
+ return this.match('#Date+')
26
+ }
27
+ /** the dictionary-form of each matched word */
28
+ View.prototype.toInfinitive = function () {
29
+ this.compute('root')
30
+ return this.docs.map(terms => terms.map(t => t.root || t.text).join(''))
31
+ }
32
+ }
33
+
34
+ // constructor-level helpers, so you can conjugate without a document
35
+ const methods = {
36
+ /** the full paradigm of a dictionary-form verb - nlp.conjugate('書く') */
37
+ conjugate: function (str) {
38
+ return conjugateVerb(str)
39
+ },
40
+ /** the paradigm of an い- or な-adjective */
41
+ conjugateAdjective: function (str) {
42
+ return str.endsWith('い') ? conjugateAdjective(str) : conjugateNaAdjective(str)
43
+ },
44
+ /** walk a conjugated verb back to its dictionary-form */
45
+ deconjugate: function (str) {
46
+ let found = deconjugate(str, isKnown)
47
+ if (!found) {
48
+ return null
49
+ }
50
+ // 読まれた deconjugates to 読まれる - keep going, back to 読む
51
+ if (roots[str] !== undefined && roots[str] !== str) {
52
+ found.root = roots[str]
53
+ }
54
+ return found
55
+ },
56
+ /** 'godan' | 'ichidan' | 'suru' | 'kuru' | .. */
57
+ verbClass: function (str) {
58
+ return verbClass(str)
59
+ },
60
+ }
61
+ export { methods }
@@ -0,0 +1,163 @@
1
+ import lexData from './_data.js'
2
+ import { unpack } from 'efrt'
3
+ import { conjugateVerb, conjugateAdjective, conjugateNaAdjective } from '../conjugate/index.js'
4
+ import { verbForms, adjForms, naAdjForms, desireForms, derivedForms } from '../conjugate/tags.js'
5
+ import misc from './misc.js'
6
+
7
+ // tags in _data.js that describe *how a word conjugates*, not what it is
8
+ // const verbHint = {
9
+ // Godan: 'Godan',
10
+ // Ichidan: 'Ichidan',
11
+ // IrregularVerb: null,
12
+ // SuruVerb: null,
13
+ // }
14
+
15
+ let lexicon = {}
16
+ // surface-form → dictionary-form, so 食べました can report 食べる
17
+ let roots = {}
18
+ // weak entries (generated forms) never overwrite a strong one (a listed word)
19
+ let strong = new Set()
20
+
21
+ const add = function (word, tags, isStrong) {
22
+ if (!word) {
23
+ return
24
+ }
25
+ if (strong.has(word) && !isStrong) {
26
+ return
27
+ }
28
+ if (isStrong) {
29
+ // a word can be listed twice - 毎朝 is a #Date and a #Noun. keep both,
30
+ // and let the tagset sort out any that genuinely conflict
31
+ if (strong.has(word)) {
32
+ let both = new Set([].concat(lexicon[word], tags))
33
+ lexicon[word] = [...both]
34
+ return
35
+ }
36
+ strong.add(word)
37
+ }
38
+ lexicon[word] = tags
39
+ }
40
+
41
+ // the derived stems - 褒められる, 書ける, 食べさせる - inflect like ichidan
42
+ // verbs in their own right, so give each of them a paradigm too
43
+ const derived = ['Potential', 'Passive', 'Causative', 'CausativePassive']
44
+
45
+ const addDerived = function (base, baseTags, dict) {
46
+ let forms = conjugateVerb(base, 'Ichidan')
47
+ if (!forms) {
48
+ return
49
+ }
50
+ Object.keys(derivedForms).forEach(form => {
51
+ let str = forms[form]
52
+ if (str && str !== base) {
53
+ add(str, ['Verb'].concat(baseTags, derivedForms[form]))
54
+ if (roots[str] === undefined) {
55
+ roots[str] = dict || base
56
+ }
57
+ }
58
+ })
59
+ }
60
+
61
+ // expand a dictionary-form verb into every surface-form it can take
62
+ const addVerb = function (dict, hint) {
63
+ let forms = conjugateVerb(dict, hint)
64
+ if (!forms) {
65
+ return
66
+ }
67
+ Object.keys(verbForms).forEach(form => {
68
+ let str = forms[form]
69
+ if (!str || str === dict) {
70
+ return
71
+ }
72
+ // a bare kana masu-stem is a tokenizer hazard - のり (乗り) would eat
73
+ // the front of 「のりこ」. keep 泳ぎ and 読み, drop のり and きり.
74
+ if (form === 'Stem' && !/[一-龯]/.test(str)) {
75
+ return
76
+ }
77
+ add(str, verbForms[form])
78
+ if (roots[str] === undefined) {
79
+ roots[str] = dict
80
+ }
81
+ })
82
+ // 食べたい inflects like an adjective
83
+ let want = conjugateAdjective(forms.Desire)
84
+ if (want) {
85
+ Object.keys(desireForms).forEach(form => {
86
+ let str = want[form]
87
+ if (str) {
88
+ add(str, desireForms[form])
89
+ if (roots[str] === undefined) {
90
+ roots[str] = dict
91
+ }
92
+ }
93
+ })
94
+ }
95
+ derived.forEach(form => {
96
+ if (forms[form]) {
97
+ addDerived(forms[form], form === 'CausativePassive' ? ['Causative', 'Passive'] : [form], dict)
98
+ }
99
+ })
100
+ add(dict, verbForms.Infinitive, true)
101
+ }
102
+
103
+ const addAdjective = function (word) {
104
+ let forms = conjugateAdjective(word)
105
+ if (forms) {
106
+ Object.keys(adjForms).forEach(form => {
107
+ let str = forms[form]
108
+ if (str && str !== word) {
109
+ add(str, adjForms[form])
110
+ if (roots[str] === undefined) {
111
+ roots[str] = word
112
+ }
113
+ }
114
+ })
115
+ }
116
+ add(word, adjForms.Infinitive, true)
117
+ }
118
+
119
+ const addNaAdjective = function (word) {
120
+ let forms = conjugateNaAdjective(word)
121
+ Object.keys(naAdjForms).forEach(form => {
122
+ let str = forms[form]
123
+ if (str && str !== word) {
124
+ add(str, naAdjForms[form])
125
+ }
126
+ })
127
+ add(word, naAdjForms.Infinitive, true)
128
+ }
129
+
130
+ // ---- 1. generated forms first, so listed words can override them ----
131
+ const unpacked = {}
132
+ Object.keys(lexData).forEach(tag => {
133
+ unpacked[tag] = Object.keys(unpack(lexData[tag]))
134
+ })
135
+
136
+ ;(unpacked.Godan || []).forEach(w => addVerb(w, 'Godan'))
137
+ ;(unpacked.Ichidan || []).forEach(w => addVerb(w, 'Ichidan'))
138
+ ;(unpacked.IrregularVerb || []).forEach(w => addVerb(w))
139
+ // 勉強 is a noun *and* the root of 勉強する
140
+ ;(unpacked.SuruVerb || []).forEach(w => {
141
+ addVerb(w + 'する')
142
+ add(w, ['Noun', 'SuruVerb'], true)
143
+ })
144
+ ;(unpacked.Adjective || []).forEach(w => addAdjective(w))
145
+ ;(unpacked.NaAdjective || []).forEach(w => addNaAdjective(w))
146
+
147
+ // ---- 2. everything else is a plain word-list ----
148
+ const skip = new Set(['Godan', 'Ichidan', 'IrregularVerb', 'SuruVerb', 'Adjective', 'NaAdjective'])
149
+ Object.keys(unpacked).forEach(tag => {
150
+ if (skip.has(tag)) {
151
+ return
152
+ }
153
+ unpacked[tag].forEach(w => add(w, tag, true))
154
+ })
155
+
156
+ // ---- 3. hand-written entries win over everything ----
157
+ Object.keys(misc).forEach(w => {
158
+ lexicon[w] = misc[w]
159
+ strong.add(w)
160
+ })
161
+
162
+ export default lexicon
163
+ export { roots }
@@ -0,0 +1,115 @@
1
+ // hand-written entries. these win over every generated form.
2
+ let lex = {
3
+ // ---- copula (だ/です) ----
4
+ // https://www.japaneseprofessor.com/reference/grammar/conjugations-of-the-japanese-copula/
5
+ 'だ': ['Copula', 'PresentTense'],
6
+ 'だった': ['Copula', 'PastTense'],
7
+ 'じゃない': ['Copula', 'PresentTense', 'Negative'],
8
+ 'ではない': ['Copula', 'PresentTense', 'Negative'],
9
+ 'じゃなかった': ['Copula', 'PastTense', 'Negative'],
10
+ 'ではなかった': ['Copula', 'PastTense', 'Negative'],
11
+ 'だろう': ['Copula', 'Presumptive'],
12
+ 'なら': ['Copula', 'ConditionalVerb'],
13
+ 'ならば': ['Copula', 'ConditionalVerb'],
14
+ 'であれば': ['Copula', 'ConditionalVerb'],
15
+ 'であって': ['Copula', 'Gerund'],
16
+ // polite copula
17
+ 'です': ['Copula', 'PresentTense', 'Polite'],
18
+ 'でした': ['Copula', 'PastTense', 'Polite'],
19
+ 'でしょう': ['Copula', 'Presumptive', 'Polite'],
20
+ 'ではありません': ['Copula', 'PresentTense', 'Polite', 'Negative'],
21
+ 'じゃありません': ['Copula', 'PresentTense', 'Polite', 'Negative'],
22
+ 'ではありませんでした': ['Copula', 'PastTense', 'Polite', 'Negative'],
23
+ 'じゃありませんでした': ['Copula', 'PastTense', 'Polite', 'Negative'],
24
+ 'でありまして': ['Copula', 'Gerund', 'Polite'],
25
+ 'でございます': ['Copula', 'PresentTense', 'Polite'],
26
+
27
+ // ---- negation & other bound auxiliaries that stand as their own token ----
28
+ 'ない': ['Auxiliary', 'PresentTense', 'Negative'],
29
+ 'なかった': ['Auxiliary', 'PastTense', 'Negative'],
30
+ 'ません': ['Auxiliary', 'PresentTense', 'Polite', 'Negative'],
31
+ 'ませんでした': ['Auxiliary', 'PastTense', 'Polite', 'Negative'],
32
+ 'ます': ['Auxiliary', 'PresentTense', 'Polite'],
33
+ 'ました': ['Auxiliary', 'PastTense', 'Polite'],
34
+ 'ましょう': ['Auxiliary', 'Volitional', 'Polite'],
35
+ 'ぬ': ['Auxiliary', 'PresentTense', 'Negative'],
36
+ 'ん': ['Auxiliary', 'PresentTense', 'Negative'],
37
+
38
+ // ---- existence verbs, easy to get wrong ----
39
+ 'ある': ['Verb', 'Infinitive', 'PresentTense'],
40
+ 'あります': ['Verb', 'PresentTense', 'Polite'],
41
+ 'あった': ['Verb', 'PastTense'],
42
+ 'ありました': ['Verb', 'PastTense', 'Polite'],
43
+ 'ありません': ['Verb', 'PresentTense', 'Polite', 'Negative'],
44
+ 'いる': ['Verb', 'Infinitive', 'PresentTense'],
45
+ 'います': ['Verb', 'PresentTense', 'Polite'],
46
+ 'いた': ['Verb', 'PastTense'],
47
+ 'いました': ['Verb', 'PastTense', 'Polite'],
48
+ 'いません': ['Verb', 'PresentTense', 'Polite', 'Negative'],
49
+
50
+ // ---- suffixes ----
51
+ 'たち': 'PluralSuffix',
52
+ 'ら': 'PluralSuffix',
53
+ 'さん': 'Honorific',
54
+ 'ちゃん': 'Honorific',
55
+ 'くん': 'Honorific',
56
+ '君': ['Noun', 'Honorific'],
57
+ '様': 'Honorific',
58
+ 'さま': 'Honorific',
59
+ '先生': ['Noun', 'Honorific'],
60
+ '氏': 'Honorific',
61
+
62
+ // ---- formal nouns (形式名詞) - grammatical, but nouns ----
63
+ 'こと': ['Noun', 'FormalNoun'],
64
+ '事': ['Noun', 'FormalNoun'],
65
+ 'もの': ['Noun', 'FormalNoun'],
66
+ '物': ['Noun', 'FormalNoun'],
67
+ 'ため': ['Noun', 'FormalNoun'],
68
+ '為': ['Noun', 'FormalNoun'],
69
+ 'とき': ['Noun', 'FormalNoun'],
70
+ 'ところ': ['Noun', 'FormalNoun'],
71
+ 'はず': ['Noun', 'FormalNoun'],
72
+ 'つもり': ['Noun', 'FormalNoun'],
73
+ 'わけ': ['Noun', 'FormalNoun'],
74
+
75
+ // ---- demonstratives (こそあど) ----
76
+ 'これ': ['Pronoun', 'Demonstrative'],
77
+ 'それ': ['Pronoun', 'Demonstrative'],
78
+ 'あれ': ['Pronoun', 'Demonstrative'],
79
+ 'どれ': ['Pronoun', 'Demonstrative', 'QuestionWord'],
80
+ 'ここ': ['Pronoun', 'Demonstrative'],
81
+ 'そこ': ['Pronoun', 'Demonstrative'],
82
+ 'あそこ': ['Pronoun', 'Demonstrative'],
83
+ 'どこ': ['Pronoun', 'Demonstrative', 'QuestionWord'],
84
+ 'この': ['Determiner', 'Demonstrative'],
85
+ 'その': ['Determiner', 'Demonstrative'],
86
+ 'あの': ['Determiner', 'Demonstrative'],
87
+ 'どの': ['Determiner', 'Demonstrative', 'QuestionWord'],
88
+ 'こんな': ['Determiner', 'Demonstrative'],
89
+ 'そんな': ['Determiner', 'Demonstrative'],
90
+ 'あんな': ['Determiner', 'Demonstrative'],
91
+ 'どんな': ['Determiner', 'Demonstrative', 'QuestionWord'],
92
+ 'こう': ['Adverb', 'Demonstrative'],
93
+ 'そう': ['Adverb', 'Demonstrative'],
94
+ 'ああ': ['Adverb', 'Demonstrative'],
95
+ 'どう': ['Adverb', 'Demonstrative', 'QuestionWord'],
96
+
97
+ // ---- question words ----
98
+ '何': ['Noun', 'QuestionWord'],
99
+ 'なに': ['Noun', 'QuestionWord'],
100
+ 'なん': ['Noun', 'QuestionWord'],
101
+ '誰': ['Noun', 'QuestionWord'],
102
+ 'だれ': ['Noun', 'QuestionWord'],
103
+ 'いつ': ['Noun', 'QuestionWord'],
104
+ 'なぜ': ['Adverb', 'QuestionWord'],
105
+ 'どうして': ['Adverb', 'QuestionWord'],
106
+ 'いくら': ['Noun', 'QuestionWord'],
107
+ 'いくつ': ['Noun', 'QuestionWord'],
108
+
109
+ // ---- irregular adnominals (連体詞) that look like adjectives but aren't ----
110
+ '大きな': ['Adjective', 'Adnominal'],
111
+ '小さな': ['Adjective', 'Adnominal'],
112
+ 'おかしな': ['Adjective', 'Adnominal'],
113
+ 'いろんな': ['Adjective', 'Adnominal'],
114
+ }
115
+ export default lex
@@ -0,0 +1,20 @@
1
+ import lexicon, { roots } from './lexicon.js'
2
+ import conjugate from '../conjugate/index.js'
3
+ import api from './api.js'
4
+
5
+ export default {
6
+ model: {
7
+ one: {
8
+ lexicon,
9
+ roots,
10
+ },
11
+ },
12
+ api,
13
+ methods: {
14
+ two: {
15
+ transform: {
16
+ verb: conjugate,
17
+ },
18
+ },
19
+ },
20
+ }