入门
# 比如我们要对 `我来到中华人民共和国` 这句话做一个分词,我们来人为分一下
1. 我 / 来到 / 中华人民共和国
2. 我 / 来到 / 中华 / 华人 / 人民 / 中华人民 / 中华人民共和国 / 共和国
对于中文我们有不不同的分词
方法,但是从我们当下的这个语境上看,肯定第一种分词方式是我们想要的。但是在不同的上下文,可能我们需要的是第二种分词方式。
有很多开源的分词工具可以帮助我们做这个事情,比如Jieba
,NLPIR[中科院]
,HanLP
,LTP[哈工大]
等等。各家的分词工具包会略有差异,但是大方向是不变的,目的都是为了中文分词
。
代码测试
导入依赖
<dependency>
<groupId>com.hankcs</groupId>
<artifactId>hanlp</artifactId>
<version>portable-1.7.8</version>
</dependency>
import com.hankcs.hanlp.HanLP
import com.hankcs.hanlp.dictionary.stopword.CoreStopWordDictionary
import com.hankcs.hanlp.seg.common.Term
import java.util
import scala.collection.JavaConversions._
object myTestnlp extends App {
System.setProperty("HADOOP_USER_NAME", "root")
//开启调试模式(会降低性能)
HanLP.Config.enableDebug()
val str = "你好上海,丁香路合欢路"
//参数:text – 文本
//返回:切分后的单词
val terms: util.List[Term] = HanLP.segment(str)
//对分词结果应用过滤
CoreStopWordDictionary.apply(terms)
private val res: String = terms.map(term => {
//term.nature 代表词性
(term.word, term.nature)
}).mkString(",")
println(s"res = ${res}")
}
运行结果
人名角色观察:[ K 1 A 1 ][你好 L 2 ][上海 L 35 K 34 ][, K 532 L 151 M 24 ][丁香 X 2 ][路 B 482 D 254 L 157 C 120 E 57 K 19 ][合欢 A 20833310 ][路 B 482 D 254 L 157 C 120 E 57 K 19 ][ K 1 A 1 ]
人名角色标注:[ /K ,你好/L ,上海/K ,,/K ,丁香/X ,路/D ,合欢/A ,路/K , /K]
识别出人名:丁香路 XD
细分词网:
0:[ ]
1:[你好]
2:[]
3:[上海]
4:[]
5:[,]
6:[丁香, 丁香路]
7:[]
8:[路]
9:[合欢]
10:[]
11:[路]
12:[ ]
res = (你好,l),(上海,ns),(丁香路,nr),(合欢,n),(路,n)
总结
HanLP
可以对中文进行分词