エスペラント語関連npmパッケージ一覧・簡易調査(2018)


electronでエスペラント辞書を作るにあたってウマ味のあるnpmライブラリが無いかなと思い調査。
https://www.npmjs.com/search?q=esperanto


## new-hope
https://www.npmjs.com/package/new-hope

### 概要
Esperantoのトークナイザ(単語区切り)。
またサンプルサイトの挙動によると、単語の語根と種類(品詞)を返す模様。

トークナイズ自体は単語区切りに限らない場合もあるようだが、本パッケージの場合はサンプルサイトの挙動を見る限り、単語区切り機能の提供という意味で良い模様。
トークナイズの種類
形態素解析    単語ごとに区切る        自然言語処理に用いる
N-gram        文字数ごとに区切る        検索インデックスの作成に用いる

とはいえ。
エスペラントにおいては、英語のように空白区切りするだけで単語区切りできる。
語根もエスペラント語のルールは単純で単語毎に固有だったり例外は無いため簡単に生成出来る。
(日本語などの場合はデータから辞書を生成しておくなど高度な処理が必要。)
中身はとても単純であることが予想される。

言語 ts
テストフレームワーク jasmine (`spec/`以下)
ビルド webpack
ライセンス MIT

https://webtopi.biz/archives/350
https://qiita.com/mogulla3/items/23aaffbe29c4e600876d
http://groonga.org/ja/docs/reference/tokenizers.html

#### ソースコード

とても単純な`splitter.ts`。
```js
export const split = (text: string) => {
  return text.split(/[" " | . | , | ; | : | ? | ! | ( | )]/)
    .map((w) => w.toLowerCase().trim())
    .filter((w) => w !== "")
};
```
https://github.com/maroun-baydoun/new-hope/blob/master/src/splitter.ts

`tokenizer.ts`も100行に満たない。主語(ex.mi)などいくつかを単語リストとのマッチで判定して、あと末尾の変化を見るだけ。

# Najtingalo
brainf*ckインタプリタ。エスペラントと関係ないのでパス。

# dictionary-eo
https://www.npmjs.com/package/dictionary-eo

Hunspellスペルチェッカ経由でLibre OfficeやFirefox等のMozilla製品で使える、と書いてあるっぽい。
辞書データのソース:
http://www.esperantilo.org/index_en.html
エスペラントと複数国語間の単語の対応表である模様。日本語は含まれていない。

これ自体を何かに組み込んで使うものではなさそう。

テストフレームワーク tape?(きいたことないやつっぽい)
ビルド 独自スクリプト
ライセンス 辞書と辞書のキャシュがGPL-2.0、コード等はMIT

### ソースコード
各言語まとめてのリポジトリになっている。
辞書ファイルがママでGitHubに上がっている。
本体コードというか機能に相当するものは、エスペラント語部分には辞書データ以外に何もない模様。
見るものはない。

## ng-datefns-pipes-all-locales
https://www.npmjs.com/package/ng-datefns-pipes-all-locales

日時文字列関数ライブラリ。
日時のロケール毎の文字列表現を、足し引き比較するなどの機能を提供しており、エスペラントも対象に含まれるということの模様。

あっ、ぱっと興味がわかなかったからスルーしてしまったけれど対応sistemoの数とかツッコミどころだったかもしれないのを読んでおけばよかった(もう面倒だからいいやの気持ち)。

## mimosa-esperanto-es6-modules
mimosaなるWeb系ビルドサービスのコメントかなにかをエスペラント語で使えるようになるらしい。
リンク先の使用ライブラリのGitHubリポジトリが消えていないか?

これ単体で使うものではなさそう。

### ソースコード
2項目程度の設定しかない。
見るものはない。

テスト chai
ビルド なし
ライセンス MIT

## stopwords-eo
https://www.npmjs.com/package/stopwords-eo

ストップワードは自然言語処理(検索)を行うにあたって一般的すぎて意味がないため除外する単語(のリスト)。
https://kotobank.jp/word/%E3%82%B9%E3%83%88%E3%83%83%E3%83%97%E3%83%AF%E3%83%BC%E3%83%89-1703083

機能的にはストップワード文字列の入ったarrayを返すだけ。
本体側(stopwordsパッケージ)によると文字列arrayから実際に取り除くメソッドが生えているオブジェクトを提供しているようなのだが。

ところでこのストップワードのソースって何?
と思ったが、リンク先にソース一覧が一応ある。(見てわからないから追ってないけれど。)
https://github.com/stopwords-iso/stopwords-iso/blob/master/CREDITS.md

### ソースコード
ストップワードの列挙されたテキストファイルがあるのみ。
生成コードは本体側(stopwordsリポジトリ)にあるそうだがまあこれもJSON生成するだけと思われる。
見るものはない。

## write-int
https://www.npmjs.com/package/write-int

int型の数字を言語毎の文字列表現にして返す。

### ソースコード
親側で以下の引数3つを用意して、言語固有のwrite()に渡される。
第一引数、親側で整数を絶対値にしてから、下の桁から格納していくarrayを生成。
第二引数、プラマイを渡す。
第三引数、オプションがあるが、英語とエスペラント語では使っていない。性別で変化する語とかで使うのではないかと思う。
また数値がゼロであれば単にzero()を呼ぶ。

エスペラント対応部分はたぶんこれ。
https://github.com/Costava/write-int/blob/master/src/languages/eo.js

マイナスには対応していない模様。(MINが-1なのは「より上」ということか。)
ちょっと読み解くのに時間がかかった。単純な数字表現とはいえコードに起こすとそれなりに複雑ということか。
上位桁から3桁毎に処理して、その3桁毎は変数triで数えて3(つまり9桁)以上はbase配列に入った桁名で共通処理できる。そこから下(tri==2や1)はルールが異なる。

## gulp-esperanto-rocks
https://www.npmjs.com/package/gulp-esperanto-rocks
https://www.npmjs.com/package/grunt-esperanto
https://www.npmjs.com/package/generator-esperanto
https://www.npmjs.com/package/gobble-esperanto
https://www.npmjs.com/package/gulp-esperanto

またビルドシステムか。よくわからないからパス。

## smart-plurals
https://www.npmjs.com/package/smart-plurals

数字を入れると指定の言語により単数・複数(あればその他)の種類が分類されて返る。

### ソースコード
エスペラントは英語と一緒になっている。
https://github.com/scottrippey/Smart-Plurals/blob/master/src/Smart.Plurals/Smart.Plurals.languages-english.js

## karma-esperanto-preprocessor
anglarのプリプロセサに関係するらしい。よくわからないしどうでも良いのでパス。
https://www.npmjs.com/package/karma-esperanto-preprocessor


## bildo
https://github.com/underr/bildo

ピーマン(等?)とリチャード・ストールマンやゲイツの写真のページが出てくるらしい。
エスペラントで名前を付けたジョークアプリなのでは。

## esperanto-bundle-stream
https://www.npmjs.com/package/esperanto-bundle-stream
https://www.npmjs.com/package/gobble-esperanto-bundle

ビルドツール。パス。

## multi-stopwords
https://www.npmjs.com/package/multi-stopwords

またストップワード。こちらは複数言語を同時指定できるということ?


エスペラント辞書を作るにあたってウマ味のありそうなものが少なくてほとんどパスした気がする。
特にビルド関係。そもそもjsのビルドエコシステムあまり使ってないし、まだ英語で書いていたい。

electronアプリをbrowserifyしてAndroid移植したmemo

現実世界のelectronでnodejsな趣味コードをbrowserifyした際の知見。 ==== 世の中のまともなプロjsエンジニアは最初からボイラープレートでgulpなビルドパイプラインを構築してまっさらなプロジェクトにjsxコードをおもむろに書き始めるとかしているのだと思い...