Quantcast
Channel: TM's Workspace »ライブラリ
Viewing all articles
Browse latest Browse all 10

形態素解析ライブラリ:lucene-gosenを使ってみました。

$
0
0

これまで、自然言語処理したいときは、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も扱いやすそうなので、近いうちに試してみたくなりました。


Viewing all articles
Browse latest Browse all 10

Trending Articles