Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/shogo82148/TinySegmenterMaker
https://github.com/shogo82148/TinySegmenterMaker
Last synced: 4 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/shogo82148/TinySegmenterMaker
- Owner: shogo82148
- License: mit
- Created: 2012-11-16T07:08:35.000Z (almost 12 years ago)
- Default Branch: main
- Last Pushed: 2022-09-30T04:41:28.000Z (about 2 years ago)
- Last Synced: 2024-10-28T14:47:02.461Z (14 days ago)
- Language: Python
- Size: 115 KB
- Stars: 70
- Watchers: 9
- Forks: 10
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
TinySegmenterMaker
=====[TinySegmenter](http://chasen.org/~taku/software/TinySegmenter/)用の学習モデルを自作するためのツール.
## 学習方法
スペースで分かち書きしたコーパスをあらかじめ準備しておきます.
コーパスから分かち書きの情報と素性を取り出します.``` bash
$ ./extract < corpus.txt > features.txt
```AdaBoostを用いて学習します.
新しい弱分類器の分類精度が0.001以下,繰り返し回数が10000回以上となったら学習を終了します.``` bash
$ g++ -O3 -o train train.cpp # コンパイル
$ ./train -t 0.001 -n 10000 features.txt model # 学習
```きちんと分割できるか実際に試してみます.
``` bash
$ ./segment model
私の名前は中野です
私 の 名前 は 中野 です
```## マルチスレッドで学習
学習プログラム train はマルチスレッドに対応しています.
コンパイルにはboostが必要です.``` bash
$ g++ -DMULTITHREAD -lboost_thread-mt -O3 -o train train.cpp
```## 学習済みモデル
JEITA\_Genpaku\_ChaSen\_IPAdic.model は
電子情報技術産業協会(JEITA)が公開している[形態素解析済みコーパス](http://anlp.jp/NLP_Portal/jeita_corpus/index.html)
を学習したものです.
[プロジェクト杉田玄白](http://www.genpaku.org/)を茶筌+IPAdicで解析したものを使用しました.RWCP.model は オリジナルの [TinySegmenter](http://chasen.org/~taku/software/TinySegmenter/) から
モデルの部分のみを取り出したものです.## 再学習
学習済みのモデルとコーパスから学習を再開し,性能を向上させることができます.
コーパスは学習に使用したものを想定していますが,別のコーパスを使っても動作はするはずです.``` bash
$ ./train -t 0.0001 -n 10000 -M model features.txt model_new
```## ライブラリの作成
makerコマンドで各種言語用のライブラリを作れます.
allを指定することで,対応しているすべての言語向けのライブラリを出力します.``` bash
$ ./maker javascript < model
$ ./maker perl < model
$ ./maker ruby < medel
$ ./maker python < model
$ ./maker cpp < model
$ ./maker tex < model
$ ./maker vim < model
$ ./maker go < model
$ ./maker jsx < model
$ ./maker csharp < model
$ ./maker all < model # 上のライブラリをすべて作成します
```### JavaScript
``` javascript
var segmenter = new TinySegmenter(); // インスタンス生成
var segs = segmenter.segment("私の名前は中野です"); // 単語の配列が返る
alert(segs.join(" | ")); // 表示
```
もちろん node.js でも使えます.
``` javascript
var TinySegmenter = require('./tinysegmenter.js').TinySegmenter;var segmenter = new TinySegmenter(); // インスタンス生成
var segs = segmenter.segment("私の名前は中野です"); // 単語の配列が返る
console.log(segs);
```### Perl
``` perl
use utf8;
use tinysegmenter;my $str = '私の名前は中野です';
my @words = tinysegmenter->segment($str);
```### Ruby
``` ruby
require './tinysegmenter'
ts = TinySegmenter.new
puts ts.segment("私の名前は中野です");
```### Python
``` python
from tinysegmenter import TinySegmenter
segmenter = TinySegmenter()
print segmenter.segment(u'私の名前は中野です')
```### C++
``` c++
#include
#include
#include
#include "tinysegmenter.hpp"using namespace std;
int main() {
TinySegmenter segmenter;
string s = "私の名前は中野です";
vector v = segmenter.segment(s);
for(int i = 0; i < v.size(); ++i) {
cout << v[i] << endl;
}
}
```### TeX
```tex
\documentclass{jsarticle}
\usepackage{tinysegmenter}
\begin{document}
\TinySegmenter{-}{私の名前は中野です}
\end{document}
```### Vim script
```vim
:echo tinysegmenter#segment('私の名前は中野です')
```### Go
```go
package mainimport (
"fmt"
"tinysegmenter"
)func main() {
s := tinysegmenter.NewSegmenter()
segs := s.Segment("私の名前は中野です")
for _, seg := range segs {
fmt.Printf("%s\n", seg)
}
}
```### JSX
```javascript
import "tinysegmenter.jsx";class _Main
{
static function main(args : string[]) : void
{
log TinySegmenter.segment("私の名前は中野です");
}
}
```### Csharp
``` csharp
static void Main(string[] args)
{
tinysegmenter segmenter = new tinysegmenter();
List segments = segmenter.Segment("私の名前は中野です");for(int i = 0; i < segments.Count; i++)
{
Console.WriteLine(segments[i]);
}
}
```### Julia
```jl
using TinySegmentertokenize("私の名前は中野です")
```