Heuristics for identifying Japanese-origin words (和語)


Given a word and its reading, I'm interested in having it be automatically be
identified as Japanese-origin (和語, but excluding 和製英語 and 和製漢語) or not. False
negatives and positives aren't really a problem for my use case, but naturally
they should be minimised if they can.

What would be some heuristics that can be implemented relatively easily in a
computer program (say, less than 100 lines per rule (using libraries is fine)
and doesn't require large amounts of training data)?

Here are some that I've thought up of. Are they correct? Can they be refined?

  * Word does not contain "litte" characters (excluding ヶ) nor long vowels (not so sure about this one)
  * Number of syllables (which I suppose is equivalent to mora if the above rule is true) is longer than the number of characters in the word
  * Word contains at least one kanji or hiragana (to exclude most of the 外来語)

Related: [How to tell if a word is Sino-Japanese or
Yamato](https://japanese.stackexchange.com/questions/23098/how-to-tell-if-a-
word-is-sino-japanese-or-yamato) and
<http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1022933605>




First of all, if a word contains both _kanji_ and _hiragana_ , it's very
likely to be _wago_. (E.g. 食べる、美しい、…)

If the word consists of _kanji_ only, like you said counting the number of
syllables is a good approach. (Of course, _on'yomi_ are to be one syllable, so
long vowels, like リョウ, and endings like ク、ン、ツ、チ pass as one syllable, even if
the reading is two morae.)

This basically reduces the problem to distinguishing one-syllable (= one-mora)
_wago_ , like 手、目、…, from one-mora _on'yomi_ , like 胃、花、…. If I don't know, I
usually guess from the sound it contains and you can probably teach your
program to do the same, e.g. カ is likely to be _on'yomi_. There will be false
positives like 蚊 or 木, but these rare exceptions could even be hard-coded.

(Of course, there are words for which the _wago_ – _kango_ – _gairaigo_
distinction is ill-defined, like 手帳 or 胃袋. I'm not sure if you want teach your
program to identify these as _jūbako yomi_ , _yutō yomi_ , etc.)

I think you can derive the likelihood from the [list of _jōyō
kanji_](https://ja.m.wikipedia.org/wiki/%E5%B8%B8%E7%94%A8%E6%BC%A2%E5%AD%97%E4%B8%80%E8%A6%A7)
by making a list of all one-mora (rather one- _kana_ ) _on'yomi_ and one-mora
_kun'yomi_.




First of all, if a word contains both _kanji_ and _hiragana_ , it's very
likely to be _wago_. (E.g. 食べる、美しい、…)

If the word consists of _kanji_ only, like you said counting the number of
syllables is a good approach. (Of course, _on'yomi_ are to be one syllable, so
long vowels, like リョウ, and endings like ク、ン、ツ、チ pass as one syllable, even if
the reading is two morae.)

This basically reduces the problem to distinguishing one-syllable (= one-mora)
_wago_ , like 手、目、…, from one-mora _on'yomi_ , like 胃、花、…. If I don't know, I
usually guess from the sound it contains and you can probably teach your
program to do the same, e.g. カ is likely to be _on'yomi_. There will be false
positives like 蚊 or 木, but these rare exceptions could even be hard-coded.

(Of course, there are words for which the _wago_ – _kango_ – _gairaigo_
distinction is ill-defined, like 手帳 or 胃袋. I'm not sure if you want teach your
program to identify these as _jūbako yomi_ , _yutō yomi_ , etc.)

I think you can derive the likelihood from the [list of _jōyō
kanji_](https://ja.m.wikipedia.org/wiki/%E5%B8%B8%E7%94%A8%E6%BC%A2%E5%AD%97%E4%B8%80%E8%A6%A7)
by making a list of all one-mora (rather one- _kana_ ) _on'yomi_ and one-mora
_kun'yomi_.

