1. 程式人生 > >NLP——斯坦福分詞工具簡單使用

NLP——斯坦福分詞工具簡單使用

本例主要演示斯坦福的中文分詞工具包stanford-segmenter.jar
下載地址
下載說明
解壓後如下:
在這裡插入圖片描述
建立好專案
將data資料夾匯入到專案根目錄下
匯入jar包
SegDemo.java檔案則是演示檔案
注意事項
SegDemo執行的時候要讀取data中的內容
查閱原始碼發現,最後返回的分詞集合segmented是陣列轉換成的(Arrays.asList()),不可進行修改。所以需要用list的構造方法重新構建一個。
下面是將程式碼封裝好後的測試案例

package com.hhh.part;
import java.io.*;
import java.util.LinkedList;
import java.util.List;
import java.util.Properties;

import org.junit.jupiter.api.Test;

import edu.stanford.nlp.ie.crf.CRFClassifier;
import edu.stanford.nlp.ling.CoreLabel;

public class PartWord {

  private static final String basedir = System.getProperty("SegDemo", "data");

  public static List<String> part(String sample) throws Exception {
    System.setOut(new PrintStream(System.out, true, "utf-8"));

    Properties props = new Properties();
    props.setProperty("sighanCorporaDict", basedir);
    props.setProperty("serDictionary", basedir + "/dict-chris6.ser.gz");

    props.setProperty("inputEncoding", "UTF-8");
    props.setProperty("sighanPostProcessing", "true");

    CRFClassifier<CoreLabel> segmenter = new CRFClassifier<>(props);
    segmenter.loadClassifierNoExceptions(basedir + "/ctb.gz", props);

    List<String> segmented = segmenter.segmentString(sample);
    
    return new LinkedList<>(segmented);//重構
  }
  @Test
  public void test1() {
	  try {
		System.out.println(part("韓國《中央日報》則報道稱,有人推測,"
				+ "第二次朝美首腦會談的時間和地點有可能定於10月下旬左右在華盛頓舉行。"
				+ "這一時期正好是對特朗普總統進行具有“期中考核”性質的11月6日美國中期選舉之前。"
				+ "若第二次朝美首腦會談在美國舉行,將成為朝鮮首腦的第一次訪美。"
				+ "然而正如朝鮮曾強烈要求第一次朝美首腦會談在平壤舉行一樣,"
				+ "此次朝鮮也有可能提出在平壤舉行會談。"));
	} catch (Exception e) {
		e.printStackTrace();
	}
  }
}