http://www.0x32.cn/html/y2010/563.html
在测试过程中需要从文本中拿到指定词性的词,比如名词或者动词,各种词性的定义我们可以依靠搜狗的语料库来实现,从搜狗实验室下载到词库后解压可以看到搜索词库的格式:
图中的数据表示:词、在互联网的词频、然后是词性。
看这个东西就可以一目了然,多种词性,包括平时很少会用到得。
下面我们需要判断一个从文本中分出的词是否为名词或者动词,就需要读取这个搜狗词库,大小在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。