1. trkbt10
Changes in title
-mikan.js : jsで機械学習なしの日本語の単語の改行を処理するライブラリを書いた
+mikan.js : 機械学習なしで、日本語の単語の改行を処理するライブラリを書いた
Changes in tags
Changes in body
Source | HTML | Preview
@@ -1,81 +1,75 @@
今朝方、はてなのホットエントリに[Budou - 機械学習を用いた日本語改行問題へのソリューション](http://tushuhei.hatenadiary.jp/entry/2016/09/12/095125)という記事が上がっていました。
ざっくりとした説明をすると、「タイトル中の単語が途中で改行されるせいで読み見辛いのを、機械学習を使ってキーワードごとに分割することでなんとかした」という感じの内容です。
## Budouというソリューション
オリジナルのBudouは、GoogleクラウドAPIを用いて単語を分けるわけですが、これ毎回APIを叩かないといけないですし、叩き過ぎるとお金もかかってきます。
また、このライブラリはPythonで書かれていますので、RubyやPHP、Node.jsでは単純に導入という形で使うことはできません。GoogleクラウドAPIの設定も必要です。
分かち書きすることで改行をどうにかするというのは、とても良いアイディアですし、導入するだけで見た目も良く見えますので、上記の理由で導入を諦めてしまうのは惜しいです。惜しいですよね?
## そこで mikan.js ですよ
ようは分かち書きをして、単語とその次のワードをくっつけてあげればいいんです。
というわけで正規表現を用いた分かち書きによるバックエンド・フロントエンド両方で動くjsのライブラリを書きました。
[trkbt10/mikan.js: 機械学習を用いていない日本語改行問題へのソリューション](https://github.com/trkbt10/mikan.js)
## インストール
```bash
-$ npm install --save mikan.js
+$ npm install --save mikanjs
```
## 使い方
nodeで用いる場合
```javascript
-import Mikan from 'mikan.js';
-const text = Mikan('常に最新、最高のモバイル。Androidを開発した同じチームから。');
+const mikan = require('mikanjs');
+console.log(mikan('常に最新、最高のモバイル。Androidを開発した同じチームから。'));
-console.log(text);
/*
-<span style="display:inline-block">常に</span>
-<span style="display:inline-block">最新、</span>
-<span style="display:inline-block">最高の</span>
-<span style="display:inline-block">モバイル。</span>
-<span style="display:inline-block">Androidを</span>
-<span style="display:inline-block">開発</span>
-<span style="display:inline-block">した</span>
-<span style="display:inline-block">同</span>
-<span style="display:inline-block">じ</span>
-<span style="display:inline-block">チームから。</span>
+<span style="display:inline-block" role="presentation">常に</span>
+<span style="display:inline-block" role="presentation">最新、</span>
+<span style="display:inline-block" role="presentation">最高の</span>
+<span style="display:inline-block" role="presentation">モバイル。</span>
+<span style="display:inline-block" role="presentation">Androidを</span>
+<span style="display:inline-block" role="presentation">開発した</span>
+<span style="display:inline-block" role="presentation">同じ</span>
+<span style="display:inline-block" role="presentation">チームから。</span>
*/
```
Webで用いる場合
```html
<div id="sample"></div>
<script src="mikan.js"></script>
<script>
var sampleElement = document.getElementById('sample');
sampleElement.innerHTML = Mikan('常に最新、最高のモバイル。Androidを開発した同じチームから。');
</script>
```
jQuery
```js
$('.hoge').html(Mikan('よりパーソナルに。よりパワフルに。 より楽しく。'));
```
React
```html
<div dangerouslySetInnerHTML={{__html : Mikan('常に最新、最高のモバイル。Androidを開発した同じチームから。')}} />
```
### オプション
第二引数に、 `{ className : 'mikan', style : 'display:inline-block' }`という感じの形式で渡してあげることで、クラス名やスタイルシートを指定することができます。
```javascript
const text = Mikan('私は好きにした。君たちも好きにしろ。', { className : 'wbr', style : '' });
console.log(text);
/*
-<span class="wbr">私は</span>
-<span class="wbr">好きに</span>
-<span class="wbr">した。</span>
-<span class="wbr">君</span>
-<span class="wbr">たちも</span>
-<span class="wbr">好きに</span>
-<span class="wbr">しろ。</span>
+<span role="presentation" class="wbr">私は</span>
+<span role="presentation" class="wbr">好きにした。</span>
+<span role="presentation" class="wbr">たちも</span>
+<span role="presentation" class="wbr">好きにしろ。</span>
*/
```