TinySegmenter
日本語用分かち書き軽量script
/icons/javascript.iconで書かれている
日本語文を入力すると、分かち書きされた単語の配列が返ってくる
より高度な形態素解析をしたい場合はkuromoji.jsを使う
リンク
HP
TinySegmenter: Javascriptだけで実装されたコンパクトな分かち書きソフトウェア
/icons/GitHub.iconのmirror
leungwensen/tiny-segmenter
作者は違う
実装
分割部分を予め機械学習して求めている
defaultはちょっと精度が悪いかも
熟語の変な部分で途切れてしまう
学習し直させる場合は↓を使う
/icons/github.iconshogo82148/TinySegmenterMaker
Demo
↓を実行して出てきたURLを押す
code:sh
deno run --unstable --allow-net=scrapbox.io,esm.sh,cdn.esm.sh,0.0.0.0:8899 https://scrapbox.io/api/code/takker/TinySegmenter/serve.tsx
CLIからHTMLファイルをlocalhostでweb broserに表示する
code:serve.tsx
import { createApp } from "https://deno.land/x/servest@v1.3.1/mod.ts";
// @deno-types="https://deno.land/x/servest@v1.3.1/types/react/index.d.ts"
import React from "https://dev.jspm.io/react/index.js";
// @deno-types="https://deno.land/x/servest@v1.3.1/types/react-dom/server/index.d.ts"
import ReactDOMServer from "https://dev.jspm.io/react-dom/server.js";
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(
"https://scrapbox.io/api/code/takker/TinySegmenter/index.tsx",
{ bundle: "module" },
);
await req.respond({
status: 200,
headers: new Headers({
"content-type": "application/javascript; charset=UTF-8",
}),
body: files"deno:///bundle.js",
});
});
const port = 8899;
app.listen({ port });
console.log(open http://localhost:${port});
/deno-ja/React/Preact applicationをDenoで作ろうとするとType Errorが発生する#60ed3e551280f0000000c732
code:index.tsx
/** @jsx h */
/** @jsxFrag Fragment */
/// <reference no-default-lib="true"/>
/// <reference lib="dom" />
/// <reference lib="deno.ns" />
/// <reference lib="esnext" />
import { Fragment, h, render } from "https://esm.sh/preact@10.5.14";
import { useMemo, useState } from "https://esm.sh/preact@10.5.14/hooks";
import TinySegmenter from "https://esm.sh/tiny-segmenter@0.2.0";
const segmenter = new TinySegmenter();
const App = () => {
const text, setText = useState("すもももももももものうち");
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);
#2021-07-25 11:23:37
#2020-11-15 01:15:30