英文分词的算法和原理

根据文档相关性计算公式

分词质量对于基于词频的相关性计算是无比重要的

英文(西方语言)语言的基本单位就是单词,所以分词特别容易做,只需要3步:

  1. 根据空格/符号/段落 分隔,得到单词组
  2. 过滤,排除掉stop word
  3. 提取词干

第一步:按空格/符号分词

用正则表达式很容易

  1. pattern = r'''(?x)    # set flag to allow verbose regexps
  2.      ([A-Z]\.)+        # abbreviations, e.g. U.S.A.
  3.    | \w+(-\w+)*        # words with optional internal hyphens
  4.    | \$?\d+(\.\d+)?%?  # currency and percentages, e.g. $12.40, 82%
  5.    | \.\.\.            # ellipsis
  6.    | [][.,;"'?():-_`]  # these are separate tokens
  7.    '''
  8. re.findall(pattern,待分词文本)

第二步:排除stop word

stopword就是类似a/an/and/are/then 的这类高频词,高频词会对基于词频的算分公式产生极大的干扰,所以需要过滤

第三步:提取词干

词干提取(Stemming) 这是西方语言特有的处理,比如说英文单词有 单数复数的变形,-ing和-ed的变形,但是在计算相关性的时候,应该当做同一个单词。比如 apple和apples,doing和done是同一个词,提取词干的目的就是要合并这些变态

Stemming有3大主流算法

Lucene 英文分词自带了3个stemming算法,分别是

  1. EnglishMinimalStemmer
  2. 著名的 Porter Stemming
  3. KStemmer

词干提取算法并不复杂,要么是一堆规则,要么用映射表,编程容易,但是必须是这种语言的专家,了解构词法才行啊

http://text-processing.com/demo/stem/ 是一个在线试验词干提取算法的网站

Lemmatisation

Lemmatisation是和词干提取(Stemming) 齐名的一个语言学名词,中文可以叫做 词形还原 ,就是通过查询字典,把 "drove" 还原到 "drive"
而stemming会把单词变短,"apples","apple"处理之后都变成了 "appl"

做计算机语言学研究才会涉及到lemmatization,我个人觉得做搜索完全可以不考虑,Stemming已经可以解决大问题了

参考

转载于:https://www.cnblogs.com/Yiutto/articles/4853177.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值