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