自然语言处理的一些算法研究和实现(NLTK)

自然语言处理中算法设计有两大部分:分而治之 和 转化 思想。一个是将大问题简化为小问题,另一个是将问题抽象化,向向已知转化。前者的例子:归并排序;后者的例子:判断相邻元素是否相同(与排序)。
这次总结的自然语言中常用的一些基本算法,算是入个门了。


递归

使用递归速度上会受影响,但是便于理解算法深层嵌套对象。而一些函数式编程语言会将尾递归优化为迭代。

如果要计算n个词有多少种组合方式?按照阶乘定义:n! = n*(n-1)*…*1
def func(wordlist):
    length = len(wordlist)
    if length==1:
        return 1
    else: 
        return func(wordlist[1:])*length
如果要寻找word下位词的大小,并且将他们加和。
from nltk.corpus import wordnet as wn

def func(s):#s是WordNet里面的对象
    return 1+sum(func(child) for child in s.hyponyms())

dog = wn.synset('dog.n.01')
print(func(dog))
构建一个字母查找树

建立一个嵌套的字典结构,每一级的嵌套包含既定前缀的所有单词。而子查找树含有所有可能的后续词。

def WordTree(trie,key,value):
    if key:
        first , rest = key[0],key[1:]
        if first not in trie:
            trie[first] = {}
        WordTree(trie[first],rest,value)
    else:
        trie['value'] = value

WordDict = {}
WordTree(WordDict,'cat','cat')
WordTree(WordDict,'dog','dog')
print(WordDict)

贪婪算法:不确定边界自然语言的分割问题(退火算法的非确定性搜索)

爬山法是完完全全的贪心法,每次都鼠目寸光的选择一个当前最优解,因此只能搜索到局部的最优值。模拟退火其实也是一种贪心算法,但是它的搜索过程引入了随机因素。模拟退火算法以一定的概率来接受一个比当前解要差的解,因此有可能会跳出这个局部的最优解,达到全局的最优解。

import nltk
from random import randint

#text = 'doyou'
#segs = '01000'

def segment(text,segs):#根据segs,返回切割好的词链表
    words = []
    last = 0
    for i in range(len(segs)):
        if segs[i]=='
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值