http://www.0x32.cn/html/y2010/563.html

在测试过程中需要从文本中拿到指定词性的词,比如名词或者动词,各种词性的定义我们可以依靠搜狗的语料库来实现,从搜狗实验室下载到词库后解压可以看到搜索词库的格式:

JAVA通过搜狗词库过滤指定词性_词库

图中的数据表示:词、在互联网的词频、然后是词性。

JAVA通过搜狗词库过滤指定词性_词性_02

看这个东西就可以一目了然,多种词性,包括平时很少会用到得。

下面我们需要判断一个从文本中分出的词是否为名词或者动词,就需要读取这个搜狗词库,大小在2Mb左右,结果返回一个布尔就可以了。

我们期望调用的形式:

 FreqWordsHandler.isFreqWords(word);

word表示需要判断的词,这句代码会返回一个布尔值,FreqWordsHandler是需要我们实现的一个静态的类,代码如下:

 /**
 *
 */
package org.nsir.terms;
 
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
 
/**
 * 用于得到指定词性的词
 *
 * @author HideHai
 *
 */
public class FreqWordsHandler {
 
	private static List freqWordsList = null;
 
	public static boolean isFreqWords(String words) {
		// System.out.println(words);
		for (String s : freqWordsList) {
			if (s.equals(words)) {
				return true;
			}
		}
		return false;
	}
 
	public static List getFreqWords(String path, String type) {
		List reList = new ArrayList();
		File file = new File(path);
		try {
			FileReader reader = new FileReader(file);
			BufferedReader buffer = new BufferedReader(reader);
			String tempStr = "";
			while ((tempStr = buffer.readLine()) != null) {
				if (tempStr.contains(",")) {
					String[] freqWors = tempStr.split("	");
					String words = freqWors[0];
					String wordType = freqWors[2];
					String[] freqType = wordType.split(",");
					for (String splittype : freqType) {
						if (splittype.equals("N")
								|| splittype.equals("V")
//								|| splittype.equals("ADV")
//								|| splittype.equals("ADJ")
								) {
							reList.add(words);
						}
					}
				} else if (tempStr.contains("IDIOM")) {
					String[] freqWors = tempStr.split("	");
					reList.add(freqWors[0]);
				}
			}
			buffer.close();
			reader.close();
			return reList;
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}
 
	static {
		if (freqWordsList == null) {
			freqWordsList = getFreqWords(
					"x:\\Freq\\SogouLabDic.dic", "N");
		}
	}
 
	public static void main(String[] args) {
		isFreqWords("稗官小说");
	}
}

这样如果传入的词在词库中标记为名词或者动词,我们就返回一个True。