これまで、自然言語処理したいときは、yahooの日本語形態素解析WebAPIを使っていたのですが、最近、lucene-gosenというJavaの形態素解析ライブラリがあるのを知りましたので、少し試してみました。
lucene-gosenサンプルコード
習作として作成したサンプルコードを以下に示します。
たったこれだけで形態素解析できてしまいます。スゴイ。
PlayFramework+Herokuと組み合わせると、形態素解析WebAPIとか簡単に作れそうです。おもしろい。
package test; import java.io.IOException; import java.util.ArrayList; import java.util.List; import net.java.sen.SenFactory; import net.java.sen.StringTagger; import net.java.sen.dictionary.Token; public class GosenTest { public static void main(String[] args){ String text="今日はとても良い天気です。"; try{ StringTagger tagger=SenFactory.getStringTagger(null); List<Token> tokens = new ArrayList<Token>(); tokens = tagger.analyze(text,tokens ); for(Token t : tokens){ System.out.println("---------------"); System.out.println(t.getSurface()); System.out.println(t.getMorpheme().getPartOfSpeech()); } }catch(IOException e){ e.printStackTrace(); } } }
ちなみに、Javaからyahooの日本語形態素解析WebAPIを使う時は、だいたい、以下のようなコードで使っていました。
import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.net.URLEncoder; import java.util.List; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.Namespace; import org.jdom.input.SAXBuilder; public class YahooWordAnalyzer { private static String appid="***"; public static void excute(String text) throws MalformedURLException, JDOMException, IOException{ String url="http://jlp.yahooapis.jp/MAService/V1/parse?" + "appid=" + appid +"&sentence="+ URLEncoder.encode(text, "UTF-8")+ "&response=reading&filter=&results=ma"; Document doc=new SAXBuilder().build(new URL(url)); Namespace ns=Namespace.getNamespace("urn:yahoo:jp:jlp"); Element eRoot=doc.getRootElement(); List<?> list=eRoot.getChild("ma_result",ns).getChild( "word_list",ns).getChildren("word",ns); for(int i=0; i<list.size(); i++){ Element word=(Element)list.get(i); Element surface=word.getChild("surface",ns); if(surface!=null)System.out.println(surface.getText()); Element reading=word.getChild("reading",ns); if(reading!=null)System.out.println(reading.getText()); Element pos=word.getChild("pos",ns); if(pos!=null)System.out.println(pos.getText()); } } public static void main(String[] args){ try{ YahooWordAnalyzer.excute("今日はとても良い天気です。"); }catch(Exception e){} } }
まだ、試していませんが、全文検索エンジンライブラリLuceneも扱いやすそうなので、近いうちに試してみたくなりました。