更多代码阅读及测试(词性标注)

2021SC@SDUSC
 


目录

1,使用 jieba.posseg模块进行分词

2,改变分词器

3,paddle模式也支持词性标注



1,使用 jieba.posseg模块进行分词

        

from __future__ import print_function
import sys
sys.path.append("../")
import jieba.posseg as pseg

def cuttest(test_sent):
    result = pseg.cut(test_sent)
    for word, flag in result:
        print(word, "/", flag, ", ", end=' ')
    print("")

测试结果:

      

可以看到每个分词都被标注了它的词性,对于词性不太了解的同学可以参考这里或者参考官方文档


2,改变分词器

        jieba.posseg.POSTokenizer(tokenizer=None) 新建自定义分词器

        

import jieba
import jieba.posseg as psg
dt = psg.POSTokenizer(tokenizer=jieba.dt)
words =dt.cut("你真好,你真棒")
for word in words:
    print(word.word,word.flag)
print(type(dt))

结果:

        

 


3,paddle模式也支持词性标注

from __future__ import print_function
import sys
sys.path.append("../")
import jieba.posseg as pseg

def cuttest(test_sent):
    result = pseg.cut(test_sent,use_paddle=True)
    for word, flag in result:
        print(word, "/", flag, ", ", end=' ')
    print("")

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
A: 任务1: HMM词性标注程序的实现基于两个核心组件:词性转移矩阵和词性发射矩阵。 词性转移矩阵定义了任一两个相邻词性出现的概率。例如,在英语中,冠词的出现几乎总是在名词前面,因此冠词后跟名词的转移率就要高于冠词后跟动词。 词性发射矩阵定义了每个词汇与每个词性的相关性。例如,在英语中,单词"play"有可能表示动词而不是名词。与"play"相邻的词汇可能会提供多的信息,以帮助选择适当的词性。 利用上述矩阵,可以使用Viterbi算法来对给定的文本进行词性标注。该算法定义了一种在概率模型上进行动态规划的方法,以查找给定观察结果下的最可能状态序列。 下面是一个简单的Python程序,用于实现基于HMM的词性标注: ```python import nltk # 训练和测试数据集 train_data = nltk.corpus.brown.tagged_sents()[:-100] test_data = nltk.corpus.brown.tagged_sents()[-100:] # 创建基于HMM的词性标注器 hmm_tagger = nltk.HiddenMarkovModelTagger.train(train_data) # 对测试数据进行词性标注,并输出准确率 accuracy = hmm_tagger.evaluate(test_data) print("Accuracy:", accuracy) ``` 任务2: 为了评估上述程序的效果,需要计算在测试集上的词性标注准确率。 可以使用nltk库中的.evaluate()方法,该方法可以计算任何类型的标注器所得到的精确度、召回率等指标。对于基于HMM的标注器,可以使用该方法计算精确度和召回率。下面是一个例子: ```python import nltk # 训练和测试数据集 train_data = nltk.corpus.brown.tagged_sents()[:-100] test_data = nltk.corpus.brown.tagged_sents()[-100:] # 创建基于HMM的词性标注器 hmm_tagger = nltk.HiddenMarkovModelTagger.train(train_data) # 对测试数据进行词性标注,并输出准确率 accuracy = hmm_tagger.evaluate(test_data) print("Accuracy:", accuracy) # 计算精确度和召回率 ref = nltk.tag.accuracy(hmm_tagger, test_data) print("Ref:", ref) precision, recall = nltk.precision_recall(ref, accuracy) print("Precision:", precision) print("Recall:", recall) ``` 在上述代码中,nltk.tag.accuracy()方法计算给定标注器在给定测试数据上的精度。然后使用nltk的.precision_recall()方法计算精度和召回率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值