I tried to build a Japanese noun detector using the morphological analyzer kuromoji.js, suggested by ChatGPT.

Tokenize

did a test run in vscode:

Screen Shot 2024-10-01 at 4.20.04 PM.png

Screen Shot 2024-10-01 at 4.20.36 PM.png

On their demo website, we can see the sub categories for the tokens.

Screen Shot 2024-10-01 at 5.49.34 PM.png

Screen Shot 2024-10-01 at 4.54.13 PM.png

This is a tone twister but the tokenizer still recognize every part.

すもも/も/もも/も/もも/の/うち

Longer Text

Then I did the “find noun” progress with a longer text.

国境の長いトンネルを抜けると雪国であった。夜の底が白くなった。信号所に汽車が止まった。

向側の座席から娘が立って来て、島村の前のガラス窓を落した。雪の冷気が流れこんだ。娘は窓いっぱいに乗り出して、遠くへ呼ぶように、

「駅長さあん、駅長さあん」

明りをさげてゆっくり雪を踏んで来た男は、襟巻で鼻の上まで包み、耳に帽子の毛皮を垂れていた。

もうそんな寒さかと島村は外を眺めると、鉄道の官舎らしいバラックが山裾に寒々と散らばっているだけで、雪の色はそこまで行かぬうちに闇に呑まれてい た。

「駅長さん、私です、御機嫌よろしゅうございます」

「ああ、葉子さんじゃないか。お帰りかい。また寒くなったよ」

「弟が今度こちらに勤めさせていただいておりますのですってね。お世話さまですわ」

Load this paragraph as a local txt file, and use this XMLHttpRequest to read as string. Probably have better solutions, while this one I just googled.

var content = [];
readTextFile("/text.txt");

kuromoji.builder({ dicPath: "dict/" }).build(function (err, tokenizer) {
    // tokenizer is ready
    var yukikuni = tokenizer.tokenize(content[0]);
    console.log(yukikuni);
    yukikuni.forEach(token => {
        if (token.pos === '名詞') {  // "名詞" means noun.
                console.log(`Noun detected: ${token.surface_form}`);
                }
    })
});

function readTextFile(file) {
    var rawFile = new XMLHttpRequest();
    rawFile.open("GET", file, false);
    rawFile.onreadystatechange = function () {
      if(rawFile.readyState === 4)  {
        if(rawFile.status === 200 || rawFile.status == 0) {
          var allText = rawFile.responseText;
        //   console.log(allText);
          content.push(allText);
          console.log(content);
         }
      }
    }
    rawFile.send(null);
  }