Kuromoji MEMO - yuokada/presto-sample-udf GitHub Wiki
package io.github.yuokada;
import com.atilika.kuromoji.ipadic.Token;
import com.atilika.kuromoji.ipadic.Tokenizer;
import com.atilika.kuromoji.ipadic.Tokenizer.Builder;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class Demo
{
public static void main(String[] args)
{
// https://qiita.com/masato_ka/items/2bae7f1e8ce245443947
String input = "井口裕香ちゃんと一風堂のラーメンが食べたい";
String userDict = "# 単語, 形態素解析結果の単語, 読み, 品詞\n" +
"井口裕香,井口裕香,イグチユカ,名詞\n" +
"一風堂,一風堂,イップウドウ,名詞\n" +
"一蘭,一蘭,イチラン,名詞\n" +
"元祖長浜,元祖長浜,ガンソナガハマ,名詞\n";
InputStream inputStream = new ByteArrayInputStream(userDict.getBytes());
Builder builder = new Tokenizer.Builder();
Tokenizer tokenizer = null;
try {
tokenizer = builder.mode(Tokenizer.Mode.NORMAL)
.userDictionary(inputStream)
.build();
}
catch (IOException e1) {
}
List<Token> tokens = tokenizer.tokenize(input);
tokens
.stream()
.map(e -> e.getSurface() + " " + e.getAllFeatures())
.forEach(System.out::println);
tokens
.stream()
.map(e -> e.getAllFeaturesArray()[0])
.forEach(System.out::println);
}
}
# Output
井口裕香 名詞,*,*,*,*,*,*,イグチユカ,*
ちゃんと 副詞,一般,*,*,*,*,ちゃんと,チャント,チャント
一風堂 名詞,*,*,*,*,*,*,イップウドウ,*
の 助詞,連体化,*,*,*,*,の,ノ,ノ
ラーメン 名詞,一般,*,*,*,*,ラーメン,ラーメン,ラーメン
が 助詞,格助詞,一般,*,*,*,が,ガ,ガ
食べ 動詞,自立,*,*,一段,連用形,食べる,タベ,タベ
たい 助動詞,*,*,*,特殊・タイ,基本形,たい,タイ,タイ
名詞
副詞
名詞
助詞
名詞
助詞
動詞
助動詞
getSurfaceForm?
トークンに分解された単語が返却されます。
getPartOfSpeech?
トークンの品詞が返却されます。
getBaseForm?
トークンの原型が返却されます。動詞の場合は、基本形に直してくれます。
getReading
トークンの読みが返却されます。
isKnown、isUnknown
辞書の登録語かどうかをbooleanで返却します。
isUser
ユーザ辞書の登録後かどうかをbookeanで返却します。
getAllFeatures?、getAllFeaturesArray?
すべての情報をString/String[]で返却します。
- http://www.hiihah.info/index.php?Java%EF%BC%9Akuromoji%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E5%BD%A2%E6%85%8B%E7%B4%A0%E8%A7%A3%E6%9E%90%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B
- https://qiita.com/yamamotoshu1127/items/ae081c8fa1c9b2804f83
array(varchar(x))
を引数に取るのに苦戦中。 パット見は出来てる気がするがテストが通らない。
同じような引数をとる関数のコードを閲覧中。
"regexp_replace","varchar","varchar, JoniRegExp, function(array(varchar),varchar(x))",
"scalar","true","replaces substrings matching a regular expression using a lambda function"
ARRAYの記法が間違えてた。 なんとなく予想で書いたコードはダメだね。
presto> select kuromoji_tokenize('一風堂のラーメンが食べたい。', 'normal', ARRAY['一風堂,一風堂,イップウドウ,名詞', '一蘭,一蘭,イチラン,名詞'] );
_col0
----------------------------------------------
[一風, 堂, の, ラーメン, が, 食べ, たい, 。]
(1 row)
Query 20180412_015840_00005_65gdd, FINISHED, 1 node
Splits: 17 total, 17 done (100.00%)
0:00 [0 rows, 0B] [0 rows/s, 0B/s]