TinySegmenter
/icons/javascript.iconで書かれている
日本語文を入力すると、分かち書きされた単語の配列が返ってくる
リンク
HP
/icons/GitHub.iconのmirror
作者は違う
実装
分割部分を予め機械学習して求めている
defaultはちょっと精度が悪いかも
熟語の変な部分で途切れてしまう
学習し直させる場合は↓を使う
Demo
↓を実行して出てきたURLを押す
code:sh
code:serve.tsx
const app = createApp();
app.handle("/", async (req) => {
await req.respond({
status: 200,
headers: new Headers({
"content-type": "text/html; charset=UTF-8",
}),
body: ReactDOMServer.renderToString(
<html>
<head>
<meta charSet="utf-8" />
<title>Demo</title>
<script src="/assets/index.bundle.js" type="module" />
</head>
<body>
<div id="app" />
</body>
</html>,
),
});
});
app.handle("/assets/index.bundle.js", async (req) => {
const { files } = await Deno.emit(
{ bundle: "module" },
);
await req.respond({
status: 200,
headers: new Headers({
"content-type": "application/javascript; charset=UTF-8",
}),
});
});
const port = 8899;
app.listen({ port });
console.log(open http://localhost:${port});
code:index.tsx
/** @jsx h */
/** @jsxFrag Fragment */
/// <reference no-default-lib="true"/>
/// <reference lib="dom" />
/// <reference lib="deno.ns" />
/// <reference lib="esnext" />
const segmenter = new TinySegmenter();
const App = () => {
const splitted = useMemo(() => segmenter.segment(text).join(" | "), text); return <>
<textarea
value={text}
onInput={(e) => setText(e.currentTarget.value)}
rows={5}
/>
<hr />
<div>{splitted}</div>
</>;
};
render(<App />, document.getElementById("app") as Element);