I tried to build a Japanese noun detector using the morphological analyzer kuromoji.js, suggested by ChatGPT.
did a test run in vscode:
On their demo website, we can see the sub categories for the tokens.
This is a tone twister but the tokenizer still recognize every part.
すもも/も/もも/も/もも/の/うち
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);
}