精华内容
下载资源
问答
  • Python3自然语言处理——词性标注
    千次阅读
    2020-12-22 16:54:57

    词性标注是对给定句子中的单词进行词性(Parts of Speech,POS)分类的过程。实现标注目的的软件称为词性标注器(tagger)。NLTK支持多种标注器。

    1.内置的词性标注器

    创建一个新文件,命名为Exploring.py,输入以下代码:

    import nltksimpleSentence="Beijing is the capital of China."wordsInSentence=nltk.word_tokenize(simpleSentence)print(wordsInSentence)partsOfSpeechTags=nltk.pos_tag(wordsInSentence)print(partsOfSpeechTags)

    第1行代码指示Python解释器将NLTK模块从磁盘加载到内存,并使NLTK库在程序中可用。第2行创建了一个名为simpleSentence的变量,并定义为一个字符串。第3行代码调用了NLTK内置的word_tokenize()函数,它将给定的句子分解成单词并返回一个Python列表数据类型。一旦得到由函数计算的结果,我们就将其分配给wordsInSentence变量。第4行代码调用了Python内置的print()函数,它显示了如屏幕所示的数据结构。在本例中,我们显示了所有标注的单词列表。仔细观察这些输出,屏幕上显示了一个Python列表的数据结构,它由以逗号分隔的所有字符串组成,所有的列表元素都括在方括号内。第5行代码调用了内置的标注器pos_tag(),通过wordsInsentence变量生成一个单词列表,同时也标注了词性。一旦标注完成,就会生成完整的元组列表,每个元组都有标记的单词和相应的词性标注,最后通过第6行代码在屏幕上打印出给定的参数,结果如下:

    ["Beijing", "is", "the", "capital", "of", "China", "."][("Beijing", "NNP"), ("is", "VBZ"), ("the", "DT"), ("capital", "NN"), ("of", "IN"), ("China", "NNP"), (".", ".")]

    在这个实例中,我们可以看到元组列表中的每个元组都由原始单词和POS标注组成。

    2.编写自己的词性标注器

    创建一个新文件,命名为OwnTagger.py输入以下源代码:

    import nltkdef learnDefaultTagger(simpleSentence):wordsInSentence=nltk.word_tokenize(simpleSentence)tagger=nltk.DefaultTagger("NN")posEnabledTags=tagger.tag(wordsInSentence)print(posEnabledTags)def learnRETagger(simpleSentence):customPatterns=[(r".*ing$","ADJECTIVE"),(r".*ly$","ADVERB"),(r".*ion$","NOUN"),(r"(.*ate|.*en|is)$","VERB"),(r"^an$","INDEFINITE-ARTICLE"),(r"^(with|on|at)$","PREPOSITION"),(r"^\-?[0-9]+(\.[0-9]+)$","NUMBER"),(r">*$","None")]tagger=nltk.RegexpTagger(customPatterns)wordsInSentence=nltk.word_tokenize(simpleSentence)posEnabledTags=tagger.tag(wordsInSentence)print(posEnabledTags)def learnLookupTagger(simpleSentence):mapping={".":".","place":"NN","on":"IN","earth":"NN","Mysore":"NNP","is":"VBZ","an":"DT","amazing":"JJ"}tagger=nltk.UnigramTagger(model=mapping)wordsInSentence=nltk.word_tokenize(simpleSentence)posEnabledTags=tagger.tag(wordsInSentence)print(posEnabledTags)if __name__=="__main__":testSentence="Mysore is an amazing place on earth. I have visited Mysore 10 times."learnDefaultTagger(testSentence)learnRETagger(testSentence)learnLookupTagger(testSentence)

    结果如下:

    [("Mysore", "NN"), ("is", "NN"), ("an", "NN"), ("amazing", "NN"), ("place", "NN"), ("on", "NN"), ("earth", "NN"), (".", "NN"), ("I", "NN"), ("have", "NN"), ("visited", "NN"), ("Mysore", "NN"), ("10", "NN"), ("times", "NN"), (".", "NN")][("Mysore", None), ("is", "VERB"), ("an", "INDEFINITE-ARTICLE"), ("amazing", "ADJECTIVE"), ("place", None), ("on", "PREPOSITION"), ("earth", None), (".", None), ("I", None), ("have", None), ("visited", None), ("Mysore", None), ("10", None), ("times", None), (".", None)][("Mysore", "NNP"), ("is", "VBZ"), ("an", "DT"), ("amazing", "JJ"), ("place", "NN"), ("on", "IN"), ("earth", "NN"), (".", "."), ("I", None), ("have", None), ("visited", None), ("Mysore", "NNP"), ("10", None), ("times", None), (".", ".")]

    第一个(3-7行)函数名为learnDefaultTagger,它接收一个名为simpleSentence的参数。第4行从NLTK库调用word_tokenize函数,将simpleSentence作为第一个参数传递给这个函数。调用这个函数处理数据后,返回值是一个单词列表,并存储在InSentence变量中。第5行代码在Python NLTK库中将参数NN传递给DefaultTagger()类来创建一个tagger对象。第6行调用了tagger对象的tag()函数,从wordsInSentence变量中得到了单词序列,然后返回了标注后的单词列表,并保存在posEnabledTags中。值得注意的是,句子中的所有单词都标注为NN,这是标注器之前设置好的,用于不知道词性信息时的基本标注。第七行调用Python内置的print()函数来检查posEnabledTags变量的内容。我们可以看到句子中的所有单词都会被标注为NN。

    9-23行代码创建了一个名为learnRETagger()的新函数,它的输入是一个字符串,输出是这个字符串包含的所有单词的列表,以及根据正则表达式标注器识别出的词性。10-19行代码看起来很多,但是每条代码可以完成很多事情:创建一个名为customPatterns的变量,定义一个新的Python列表数据类型,将八个元素添加到这个列表中·这个列表中的每个元素都是一个元组,每个元组都有两项,元组中的第一项是一个正则表达式,元组中的第二项是一个字符串。我们通过模式的识别将英语单词标注为某一类给定的词性。在前面的例子中,我们使用以下特征标注英文单词的词性:以ing结尾的单词可以被标注为形容词,例如,running;以ly结尾的单词可以被标注为副词,例如,willingly;以ion结尾的单词可以被标注为名词,例如,intimation;以ate或en结尾的单词可以被标注为动词,例如,terminate、darken或lighten;以an结尾的单词可以被标注为不定冠词;with、on或者at这类词被标注为介词;-123.0、984这样的词可以被标注为数词;我们将其他单词都标注为none,这个Python内置的数据类型表示无意义。第20行代码创建了NLTK的内置正则表达式标记器RegexpTagger的一个对象。我们将元组列表传递给该类的第一个参数customPatterns变量来初始化对象。该对象在将来可以被名为Tagger的变量引用。之后的处理过程,我们首先尝试使用NLTK内置的word_tokenize()函数来对字符串simpleSentence进行分词,并将单词列表存储在wordsInSentence变量中。然后我们调用正则表达式词性标注器的tag()函数来标注存储在wordsInSentence变量中的所有单词。这个标注过程的结果存储在posEnabledTags变量中。

    25-33行定义一个新的函数learnLookupTagger,它将一个字符串作为参数传递给simpleSentence变量。33行代码从NLTK库调用UnigramTagger。这是一个查询词性标注器,它的输入是我们已经创建的定义为mapping变量的Python字典。创建的tagger对象用于将来调用。我们使用NLTK内置的word_tokenize()函数来标注句子并将结果保存在wordsInSentence变量中。当标注句子时,我们调用tagger的tag()函数,输入是传递给wordsInSentence变量的单词列表,并将标注的结果保存在posEnabledTags变量中。

    3.训练自己的词性标注器

    创建一个新文件,命名为Train.py。3.输入以下源代码:

    import nltkimport pickledef sampleData():return["Beijing is the capital of China.","Steven Jobs was the CEO of Apple","iphone was Invented by Apple.","Books can be purchased in Market."]def buildDictionary():dictionary={}for sent in sampleData():partsOfSpeechTags=nltk.pos_tag(nltk.word_tokenize(sent))for tag in partsOfSpeechTags:value=tag[0]pos=tag[1]dictionary[value]=posreturn dictionarydef saveMyTagger(tagger,fileName):fileHandle=open(fileName,"wb")pickle.dump(tagger,fileHandle)fileHandle.close()def saveMyTraining(fileName):tagger=nltk.UnigramTagger(model=buildDictionary())saveMyTagger(tagger,fileName)def loadMyTagger(fileName):return pickle.load(open(fileName,"rb"))sentence="Iphone is purchased by Steven Jobs in Beijing Market."fileName="myTagger.pickle"saveMyTraining(fileName)myTagger=loadMyTagger(fileName)print(myTagger.tag(nltk.word_tokenize(sentence)))

    结果如下:

    [("Iphone", None), ("is", "VBZ"), ("purchased", "VBN"), ("by", "IN"), ("Steven", "NNP"), ("Jobs", "NNP"), ("in", "IN"), ("Beijing", "NNP"), ("Market", "NNP"), (".", ".")]

    通过前两行代码,我们将NLTK和pickle模块加载到程序中。pickle模块实现了强大的序列化和反序列化算法,可用于处理非常复杂的Python对象。

    4-10行定义了一个名为sampleData()的函数,它返回一个Python列表。本例中,我们返回四个示例字符串。

    12-20定义一个名为buildDictionary()的函数,它每次从sampleData()函数生成的列表中读取一条字符串。每条字符串都用nltk.word_tokenize()函数进行分词。分词结果被添加到一个Python字典中,其中字典的键(key)是句子中的单词,字典的值(value)是词性。当字典生成完毕,返回给调用者。

    22-25行定义一个名为saveMyTagger()的函数,它需要两个参数:tagger:词性标注器的一个对象;fileName:存储tagger对象的文件名称。我们首先以写入二进制(Write Binary,WB)的模式打开文件。然后使用pickle模块的dump()方法,将整个标注器存储在文件中,并在fileHandle上调用close()函数。

    27-29行定义一个名为saveMyTraining的新函数,它接收名为fileName的单个参数。我们构建一个nltk.UnigramTagger()对象,它的输入是buildDictionary()函数的输出模型(根据我们之前定义的字符串示例集合建立),当生成tagger对象时,调用saveMyTagger()函数将其保存到磁盘。

    31-32行定义一个新的函数loadMyTagger(),它接收名为fileName的单个参数。该函数从磁盘读取文件并将其传递给pickle.load()函数,该函数从磁盘反序列化tagger对象并返回它的引用。

    34和35行定义了两个变量,一个是sentence,一个是fileName,它们分别是我们需要分析的字符串和我们存储词性标注器的文件路径。

    37行调用了saveMyTraining()函数,myTagger.pickle为其参数。所以,我们基本上完成了将训练好的标注器存储在这个文件中。

    39行将myTagger.pickle作为loadMyTagger()函数的参数,它从磁盘加载这个标注器,对其进行反序列化并创建一个对象。该对象进一步赋给myTagger变量。

    41行调用刚从磁盘加载的tagger对象的tag()函数。我们用它来标注我们创建的字符串样本。处理完成后,屏幕上显示输出结果。

    附:词性标注的标签对应的含义

    Number

    Tag

    Discription

    1

    CC

    Coordinating conjunction 连接词

    2

    CD

    Cardinal number  基数词

    3

    DT

    Determiner  限定词(如this,that,these,those,such,不定限定词:no,some,any,each,every,enough,either,neither,all,both,half,several,many,much,(a) few,(a) little,other,another.

    4

    EX

    Existential there 存在句

    5

    FW

    Foreign word 外来词

    6

    IN

    Preposition or subordinating conjunction 介词或从属连词

    7

    JJ

    Adjective 形容词或序数词

    8

    JJR

    Adjective,comparative 形容词比较级

    9

    JJS

    Adjective,superlative 形容词最高级

    10

    LS

    List item  marker 列表标示

    11

    MD

    Modal 情态助动词

    12

    NN

    Noun, singular or mass 常用名词 单数形式

    13

    NNS

    Noun, plural  常用名词 复数形式

    14

    NNP

    Proper noun, singular  专有名词,单数形式

    15

    NNPS

    Proper noun, plural  专有名词,复数形式

    16

    PDT

    Predeterminer 前位限定词

    17

    POS

    Possessive ending 所有格结束词

    18

    PRP

    Personal pronoun 人称代词

    19

    PRP$

    Possessive pronoun 所有格代名词

    20

    RB

    Adverb 副词

    21

    RBR

    Adverb, comparative 副词比较级

    22

    RBS

    Adverb, superlative 副词最高级

    23

    RP

    Particle 小品词

    24

    SYM

    Symbol 符号

    25

    TO

    to 作为介词或不定式格式

    26

    UH

    Interjection 感叹词

    27

    VB

    Verb, base form 动词基本形式

    28

    VBD

    Verb, past tense 动词过去式

    29

    VBG

    Verb, gerund or present participle 动名词和现在分词

    30

    VBN

    Verb, past participle 过去分词

    31

    VBP

    Verb, non-3rd person singular present 动词非第三人称单数

    32

    VBZ

    Verb, 3rd person singular present 动词第三人称单数

    33

    WDT

    Wh-determiner 限定词(如关系限定词:whose,which.疑问限定词:what,which,whose.)

    34

    WP

    Wh-pronoun 代词(who whose which)

    35

    WP$

    Possessive wh-pronoun 所有格代词

    36

    WRB

    Wh-adverb   疑问代词(how where when)

    更多相关内容
  • 词性标示工具.exe

    2013-07-25 16:09:21
    输入中文,得到该中文词性!非常好用的一个工具,也非常的强大!
  • 实现中文分词、词性标注、关键词提取、句法分析等智能预处理的一个简单的小实验作业 实验报告 一、实验目的 3 二、实验环境 3 三、 实验内容(内容以txt1分析为例) 3 1、文本素材自动分词 3 (1)分词初步...

    实现中文分词、词性标注、关键词提取、句法分析等智能预处理的一个简单的小实验作业

    实验报告 

    一、实验目的 

    二、实验环境 

    三、 实验内容(内容以txt1分析为例) 

    1、文本素材自动分词 

    (1)分词初步处理 

    (2) jieba精准模式分词 

    (3) 部分结果分析 

    (4)调整分词结果 

    (5)添加自定义词典 

    (6)动态调整词典 

    (7)调整词频 

    (8)导出结果 

    2、 文本素材自动词性标注 

    (1) 基于jieba词性标注 

    (2) 基于jieba词性标注结果分析 

    (3) 基于hanlp词性标注结果分析 

    3、 文本素材关键词提取 

    (1) TF-IDF 

    (2) TextRank算法 

    (3) 基于hanlp的TextRank算法 

    (4) 词云绘制 

    4、 文本自动摘要与依存句法分析 

    (1)自动摘要 

    (2) 依存句法分析 

    四、 结果分析 

    1. 基于不同方法算法以及各自领域功能中性能、精度各有差异 

    2. 对于部分文本的分词、标注等出现格式的错误分析 

    (1) 由于格式符号问题代码报错 

    (2) 分词以及词性标注后,出现空格太多的问题

    3.改进方案思考 

    一、实验目的

    1、理解文本素材预处理的主要任务;

    2、掌握文本素材预处理的主要方法;

    3、掌握并实现中文分词、词性标注、关键词提取、句法分析等智能预处理。

    二、实验环境

    操作系统:window10

    软件开发环境:anacoda、jupyterLab、python3.7+

    环境变量配置等:anacoda全局变量

    三、实验内容内容以txt1分析为例

    1、文本素材自动分词

    1)分词初步处理

    (2)jieba精准模式分词

    (3)部分结果分析

    主要看到对于俄罗斯报以及阿特里奇的人名,jieba的精准模式分词是存在问题的,为解决这一问题进行以下分析。

    4调整分词结果

    不难发现,以上运行结果跟我们的预期与想表达的意思是不一致的。

    为了使分词结果与预期一致,我们可以采用如下方法:

    (5)添加自定义词典

    开发者可以指定自己自定义的词典,以便包含jieba词库里没有的词。虽然jieba有新词识别能力,但是自行添加新词可以保证更高的正确率。

    词典格式和dict.txt一样,一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。

    使用 jieba.load_userdict(file_name) 即可载入词典。

     

    可以看到,虽然文本分词准确率有了提高,但是俄罗斯报以及阿特里奇的人名还是仍有问题。

    6)动态调整词典

    使用 add_word(word, freq=None, tag=None) 和 del_word(word) 可在程序中动态修改词典,这是对“添加自定义词典”功能的补充。

     

    从结果上看,将阿特里奇的人名加入自定义的词典,并且这个字典可以动态的加入到其中。

    7)调整词频

       使用 suggest_freq(segment, tune=True) 可调节单个词语的词频,使其能(或不能)被分出来,这个功能不是基于词典的。

    (8)导出结果

    最后将相对准确的结果导出。

    2.文本素材自动词性标注

    • 通过查询字典的方式获取识别词的词性,通过HMM隐马尔科夫模型来获取未登录词的词性,从而完成整个语句的词性标注。但可以看到查询字典的方式不能解决一词多词性的问题,也就是词性歧义问题。故精度上还是有所欠缺的。

    • 标注句子分词后每个词的词性,词性标示兼容ICTCLAS 汉语词性标注集。

    • 除了jieba默认分词模式,提供paddle模式下的词性标注功能。

    (1)基于jieba词性标注

     

    (2)基于jieba词性标注结果分析

    可以看到,jieba词性标注对数字的分组是尤为敏感的,在这里为进一步找到更好的词性标注方法,我们选择了基于hanlp的词性标注。

    (3)基于hanlp词性标注结果分析

    pyhanlp实现的分词器有很多,同时pyhanlp获取hanlp中分词器也有两种方式

    第一种是直接从封装好的hanlp类中获取,这种获取方式一共可以获取五种分词器,而现在默认的就是第一种维特比分词器

    • 1.维特比 (viterbi):效率和效果的最佳平衡。也是最短路分词,HanLP最短路求解采用Viterbi算法2.
    • 2.双数组trie树 (dat):极速词典分词,千万字符每秒(可能无法获取词性,此处取决于你的词典)
    • 3.条件随机场 (crf):分词、词性标注与命名实体识别精度都较高,适合要求较高的NLP任务
    • 4.感知机 (perceptron):分词、词性标注与命名实体识别,支持在线学习
    • 5.N最短路 (nshort):命名实体识别稍微好一些,牺牲了速度
    • 6.第二种方式是使用JClass直接获取java类,然后使用。这种方式除了获取上面的五种分词器以外还可以获得一些其他分词器,如NLP分词器,索引分词,快速词典分词等等

    1)NLP分词器

    2)维特比分词器

     

    3)条件随机场 (crf)分词

    4)结果分析

    分析结果可以看到条件随机场 (crf)分词对于四机以及人名有着较为良好的词性标注能力。

    3.文本素材关键词提取

    1. allowPOS 仅包括指定词性的词,TF-IDF 算法默认为空,不筛选,TextRank 算法默认过滤词性。
    2. "ns", “n”, “vn”, “v”, “nr”,对应 地名、名词、动名词、动词、人名

    (1)TF-IDF

    期间使用百度的停用词表

     

     

    (2)TextRank算法

    extract_tags() 将频繁词作为关键词;textrank() 是利用局部词汇之间关系对后续关键词进行排序,其模型一般表示为一个有向有权图,计算过程中要迭代,较为耗时。

    (3)基于hanlp的TextRank算法

    结果:

    (4)词云绘制

    4.文本自动摘要与依存句法分析

    在文本摘要以及依存句法分析中选用的是基于hanlp的自然语言处理。

    1自动摘要

    (2)依存句法分析

    结果:

    四、结果分析

    1. 基于不同方法算法以及各自领域功能中性能、精度各有差异

    • 中文分词
    1. HMM-Bigram(速度与精度最佳平衡;一百兆内存)
    2. 最短路分词、N-最短路分词
    3. 由字构词(侧重精度,全世界最大语料库,可识别新词;适合NLP任务)
    4. 感知机分词、CRF分词
    5. 词典分词(侧重速度,每秒数千万字符;省内存)
    6. 极速词典分词
    7. 所有分词器都支持:
    8. 索引全切分模式
    9. 用户自定义词典
    10. 兼容繁体中文
    11. 训练用户自己的领域模型
    • 词性标注
    1. HMM词性标注(速度快)
    2. 感知机词性标注、CRF词性标注(精度高)
    3. 命名实体识别
    4. 基于HMM角色标注的命名实体识别 (速度快)
    5. 中国人名识别、音译人名识别、日本人名识别、地名识别、实体机构名识别
    6. 基于线性模型的命名实体识别(精度高)
    7. 感知机命名实体识别、CRF命名实体识别
    • 关键词提取
    1. TextRank关键词提取
    • 自动摘要
    1. TextRank自动摘要
    • 短语提取
    1. 基于互信息和左右信息熵的短语提取

    2.对于部分文本的分词、标注等出现格式的错误分析

    (1)由于格式符号问题代码报错

    在进行实验操作:7.txt中,我的代码出现了报错如图所示:

    为分析其原因,我进行了回溯,发现jupyter针对文本内容识别报错。对此,有以下几个原因:

    1. 文本格式、编码不识别,我用的是pandas自带的读取read_csv方法,对于此可能是由于UTF-8、或者csv不识别,简单的转换代码编码后,错误仍然出现,问题排除。
    2. 代码版本兼容问题,由于其他文本均不会出现报错,将此问题排除。
    3. 文本部分符号与代码的识别上出现问题。看报错的回溯信息,在文本的第25行,发现,空格以及双引号的问题,简单的对符号进行修改,发现问题解决,代码得以成功跑通,简单分析的是由于文本预处理相关出了问题。由此,可以分析得到,在自然语言处理前,数据信息的采集过程后对于文本的筛选处理格式是非常重要的。

    第25行:

    (2)分词以及词性标注后,出现空格太多的问题。

    如图是科大讯飞语言处理结果,其对于多余的空格以及由于符号的分词效果相当良好,而我们出来的结果相差一些,尤其是词性标注。

    txt导读中间的空格会直接被我们的算法识别成两个词,而其他平台中却没有出现这个问题。

    3.改进方案思考

    • 文本预处理很最重要,针对我们的算法,我们需要文本的格式可以被算法识别,且保证不会因为格式等原因影响分词、标注、关键词提取的精度。
    • 算法的挑选很重要、不同的算法基于不同的功能方向(例如分词、标注、关键词提取等),针对数据量以及时间性能等对算法的选择进行考量。

    实验数据、代码会在后续上传,

    本文仅供交流,转载请标明来处,谢谢

    展开全文
  • 文章目录使用斯坦福分词器进行词性标注前言中文分词是中文文本处理的一个基础步骤,同时也是中文人机自然语言交互的基础模块,与英文不同的是,中文句子中没有词的界限,因此在进行中文自然语言处理时,通常需要先...

    使用斯坦福分词器进行词性标注



    前言

    中文分词是中文文本处理的一个基础步骤,同时也是中文人机自然语言交互的基础模块,与英文不同的是,中文句子中没有词的界限,因此在进行中文自然语言处理时,通常需要先进行分词,分词效果将直接影响词性,句法树等模块的效果场景不同,要求也不同。在人机自然语言交互中,成熟的中文分词算法能够达到更好的自然语言处理效果,帮助计算机理解复杂的中文语言。基于统计的机器学习算法stanford,基本思路是对汉字进行标注训练,不仅考虑了词语出现的频率,还考虑上下文,具备良好的学习能力,因此对歧义词和未登录词的识别都具有良好的效果。

    一、斯坦福分词器是什么?

    Stanford CoreNLP是一个自然语言处理工具包。它集成了很多非常实用的功能,包括分词,词性标注,句法分析等等。这不是一个深度学习框架,而是一个已经训练好的模型,实际上可以类比为一个软件。目前市面上有不少类似的工具,结巴分词、清华、哈工大等等,相比之下我个人认为斯坦福这一款有三个值得选择的理由(也可能是优势,但是我没用过其他工具所以没法比):功能足够多,一站式解决所有主流需求;操作足够方便,放到 Python 里基本上就是一两行代码;
    语言支持广泛,目前支持阿拉伯语,中文,英文,法语,德语,西班牙语,做平行语料的对比非常方便。Stanford CoreNLP 本身是 Java 写的,提供了 Server 的方式进行交互,可以很方便地在Python 中使用。使用极少的代码就能实现我们想要的功能。

    二、使用步骤

    1.去官网下载工具包


    包括核心包和中文分包两种,下载完成后,将中文包解压缩到核心包中,形成一个完整的包,方便我们去调用。核心部分已经包括了英语的处理能力,因为我们要处理的内容包括中文,所以还要下载与中文相关的程序包下载成功后,导引根目录即我们下载的核心包中即可完成工具包中相应的操作。
    在这里插入图片描述
    这就是弄完之后的图,形成一个总包,安装成功的工具包中就可以通过python直接调用了,其中要注意的是中文包和我们下载的核心包的版本要对应。要注意的是文件夹不能含有中文,否则会读入不进去。

    2.导入库

    pip install stanfordcorenlp
    

    3.斯坦福模型功能的介绍

    ①分词 Tokenization
    通过nlp.word_tokenize(sentence)将我们选择的文本内容进行分词,word_tokenize 这个方法的返回值是一个列表,处理起来非常的方便,但要注意一点,如果使用 Pandas,那 list 是无法保存的。一个比较常见的操作是使用一个DataFrame 来装语料,每一句语料对应一行,然后添加一列来装对应句子的tokens,那么在刚刚操作完的时候这一列装的是一列list,但如果接下来把这个DataFrame 保存成文件,比如csv文件,那么下次再重新读取进来的时候这一列DataFrame就变成了字符串格式。
    ②词性标注 Part-of-speech Tagging
    词性标注实际上包含了分词和标注两个部分。标注的含义在第五部分。跟分词结果一样,POS的结果一旦保存再读取也会变成字符串,所以一般还是需要处理一下。
    ③句法成分分析 Constituency Parsing
    句法分析的标注实际上是由两个部分组成的,在最小的一层括号内实际上就是词性标注,而除此之外则是与句子结构相关的标注。句法分析的标注也在第五部分给出。
    ④标注集 Tagset
    CoreNLP 使用的是宾州树库的标注集(Penn Treebank Tagset),无论中英。目前在中文网络上,中文标注集总结的比较全,但英文标注集基本上没有完全正确的,尤其是句法相关的标注。中文的标注集实际上是 Penn Chinese Treebank Tagset。
    ⑤NER工具
    NER往往作为Natural Language applications的基础,比如QA,text summarization,machine translation等的基础,NER是一种序列标注任务,常见的序列标注任务还有分词,词性标注(POS),关键词抽取,词义角色标注等。NER的关键是实体边界的确定和实体类别的判断。NER是多分类问题,对于分类问题的评价标准,常用的评价标准有:Acc,Precision,Recall和F1值 Acc是一种很常见的评价标准,但只是这个又是不够的,因为在数据不均衡的情况下,Acc往往只会给我们带来欺骗性,比如癌症检测 (我们希望关注的是minority class)F1值是综合了precision和recall的一个指标。

    代码如下(示例):

    from stanfordcorenlp import StanfordCoreNLP
    #指明安装路径和语言类型(中文)
    nlp = StanfordCoreNLP(r'D:\learn\nlp\stanford-corenlp-full-2018-10-05', lang='zh')
    #这里的文件位置就是我们刚才下载的核心包位置
    sentence = "今天核酸队长死了"
    #进行分词的语句
    print(nlp.word_tokenize(sentence))
    print(nlp.pos_tag(sentence))
    print(nlp.parse(sentence))
    print(nlp.ner(sentence))
    print(nlp.dependency_parse(sentence))
    nlp.close()
    

    4.分词结果展示

    在这里插入图片描述

    5.分词结果进行分析

    对于一个二分类系统,将实例分为正类(Positive)、负类(Negative)则模式分类器有四种分类果:
    TP(True Positive):正确的正例,一个实例是正类并且也被判定成正类
    FN(False Negative):错误的反例,漏报,本为正类但判定为假类
    FP(False Positive):错误的正例,误报,本为假类但判定为正类
    TN(True Negative):正确的反例,一个实例是假类并且也被判定成假类
    1)准确率
    既然是个分类指标,我们可以很自然的想到准确率,准确率的定义是预测正确的结果占总样本的百分比,其公式如下:
    准确率 =(TP+TN)/(TP+TN+FP+FN)
    在这里插入图片描述
    2)精准率
    精准率(Precision)又叫查准率,它是针对预测结果 而言的,它的含义是在所有被预测为正的样本中实际为正的样本的概率,意思就是在预测为正样本的结果中,我们有多少把握可以预测正确,其公式如下:精准率 =TP/(TP+FP)
    在这里插入图片描述
    3)召回率
    召回率(Recall)又叫查全率,它是针对原样本而言的,它的含义是在实际为的样本中被预测为正样本的概率,其公式如下:
    在这里插入图片描述
    4)F1 分数
    通过上面的公式,我们发现:精准率和召回率的分子是相同,都是 TP,但分母是不同的,一个是(TP+FP),一个是(TP+FN)。两者的关系可以用一个 P-R 图来展示:
    在这里插入图片描述
    5)带入我们的模型中
    分词结果:[“今天”,“核酸”,“队长”,“死了”]
    [1,2],[3,4],[5,6],[7,8]
    标准分词结果:[“今天”,“核酸”,“队”,“长”,“死”,“了”]
    [1,2],[3,4],[5,5],[6,6],[7,7],[8,8]
    重合部分有[1,2],[3,4]
    计算后的到准确率为
    ①P=2/4100%=50% ②R=2/6100%=33.3%③F1=2PR/(P+R)≈40.0


    三、总结

    斯坦福模型功能足够多,一站式解决所有主流需求;操作足够方便,放到 Python 里基本上就是一两行代码;语言支持广泛,目前支持阿拉伯语,中文,英文,法语,德语,西班牙语,做平行语料的对比非常方便。Stanford CoreNLP 本身是 Java 写的,提供了 Server 的方式进行交互,可以很方便地在Python 中使用。使用极少的代码就能实现我们想要的功能。对于不同种类的分词模式都有各自的优缺点,要根据具体问题去应用相对应的中文词性标注。

    展开全文
  • 这次做的可以自行加入单词,还有音标,发音,放到相应的文件夹里,软件就可以自动录入。有单元训练和综合测试,测试完有得分可以订正,有词性和音标显示,还能发音,包里有一些非常标准的wav发音音频!帮助同学们在...
  • 词性标注 词性标注的概念 词性是词汇的基本语法属性,通常称为词类。 词性标注(Part-Of-Speech tagging, POS tagging)也被称为语法标注(grammatical tagging)或词类消疑(word-category disambiguation),是...

    词性标注

    词性标注的概念

    词性是词汇的基本语法属性,通常称为词类。
    词性标注(Part-Of-Speech tagging, POS tagging)也被称为语法标注(grammatical tagging)或词类消疑(word-category disambiguation),是语料库语言学(corpus linguistics)中将语料库内单词的词性按其含义和上下文内容进行标记的文本数据处理技术
      词性标注可以由人工或特定算法完成,使用机器学习(machine learning)方法实现词性标注是自然语言处理(Natural Language Processing, NLP)的研究内容。
      常见的词性标注算法包括隐马尔可夫模型(Hidden Markov Model, HMM)、条件随机场(Conditional random fields, CRFs)等 。
       词性标注主要被应用于文本挖掘(text mining)和NLP领域,是各类基于文本的机器学习任务,例如语义分析(semantic analysis)和指代消解(coreference resolution)的预处理步骤。
       自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学。因此,这一领域的研究将涉及自然语言,即人们日常使用的语言,所以它与语言学的研究有着密切的联系,但又有重要的区别。自然语言处理并不是一般地研究自然语言,而在于研制能有效地实现自然语言通信的计算机系统,特别是其中的软件系统。因而它是计算机科学的一部分。
      自然语言处理(NLP)是计算机科学,人工智能,语言学关注计算机和人类(自然)语言之间的相互作用的领域。

    词性标注中的难点

    词性标注遇到的最重要的问题就是词性兼类问题。
    汉语是一种缺乏词形态变化的语言,词的类别不能像印欧语那样,直接从词的形态变化上来判别。
    造成词性兼类问题的原因主要有以下几点:
    1.汉语缺乏词形态变化,无法通过词形变化判别词类;
    2.汉语中,常用词兼类现象严重,比如:“这个人什么都好,就是好酗酒。”其中,第一个“好”读三声,是形容词,而第二个“好”读四声,是动词。
    3.没有统一的汉语词类划分标准,有些语料划分很粗糙。
    注意:《现代汉语八百词》收取的常用词中,兼类词所占的比例高达22.5%,而且发现越是常用的词,不同的用法越多。由于兼类使用程度高,兼类现象涉及汉语中大部分词类,因而造成在汉语文本中词类歧义排除的任务量巨大。

    进行词性标注的原因

    词性标注是很多NLP任务的预处理步骤,如句法分析,经过词性标注后的文本会带来很大的便利性,但也不是不可或缺的步骤。

    词性标注的方法

    词性标注这里基本可以照搬分词的工作,在汉语中,大多数词语只有一个词性,或者出现频次最高的词性远远高于第二位的词性。据说单纯选取最高频词性,就能实现80%准确率的中文词性标注程序。

    主要可以分为基于规则和基于统计的方法,下面列举几种统计方法:
    1、基于最大熵的词性标注
    2、基于统计最大概率输出词性
    3、基于HMM的词性标注

    词性标注的应用

    1、句法分析预处理
    2、词汇获取预处理
    3、信息抽取预处理

    汉语词性对照表

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    词性标注有小标注集和大标注集。
    例如小标注集把代词都归为一类,大标注集可以把代词进一步分成三类。
    人称代词:你、我、他、它、你们、我们、他们
    疑问代词:哪里、什么、怎么
    指示代词:这里、那里、这些、那些
    采用小标注集比较容易实现,但是太小的标注集可能会导致类型区分度不够。、
    举个例子:在黑白两色世界中,可以通过颜色的深浅来分辨出物体,但是通过七彩颜色可以分辨出更多的物体。
    练习例子
    示例一
    在这里插入图片描述
    示例二
    在这里插入图片描述

    展开全文
  • 中文语料 自动分词、标注词性 工具

    万次阅读 2019-01-14 11:57:31
    参数均为 须标注的文章或字符串,返回值均为 标注好词性的内容 链接如下: 语料库在线 传媒语言语料库在线分词标注系统 请合理使用,勿频繁使用它们的接口! #!/usr/bin/env python # -*- coding: utf-8 -*- ...
  • 一、(4) 结巴分词词性提取

    千次阅读 2019-05-15 11:22:56
    ※ 结巴分词词性提取 代码如下: # -*- coding: utf-8 -*- """ Created on Tue May 14 14:45:01 2019 @author: sun """ import jieba.posseg as psg import codecs # 建立结果保存路径 result = codecs.open("带...
  • 自然语言处理之词性标注

    千次阅读 2019-08-27 00:17:25
    对于词性标注而言,不论是中文还是英文,其难点在于对于不同的语境,词性的多变化;另一方面,随着社会的发展,很多词都会潜移默化的产生额外的词性。相信这些现象,大家都有所感触,也经常遇到这些情况,...
  • 由宾夕法尼亚大学(UPenn)开发并通过语言数据联盟(LDC) 发布的中文句法树库(Chinese Treebank), 来源为新闻数据、新闻杂志、广播新闻、广播谈话节目、微博、论坛、聊天对话和电话数据等, 包括中文分词cws、词性标注...
  • 中英文分词及词性标注工具

    万次阅读 2014-04-01 14:56:34
    1.中文分词、词性标注 中科院:ictclas http://www.ictclas.org/sub_1_1.html 具体使用方面看他里面的例子及文档很详细。突出功能是分词功能,还有命名实体识别功能。   哈工大信息检索实验室:LTP 语言技术...
  • Jieba中文含义结巴,jieba库是目前做的最好的python分词组件。首先它的安装十分便捷,只需要使用pip安装;其次,它不需要另外下载其它的数据包,在这一点上它比其余五款分词工具都要便捷。另外,jieba库支持的文本...
  • 分词软件中科院编写

    2014-03-02 16:46:58
    分词软件词性标注,可用于文本挖掘,和情感分析领域
  • 第一篇文章主要介绍哈工大pytltp工具,包括安装过程、中文分词、词性标注和实体识别等。 [Python知识图谱] 一.哈工大pyltp安装及中文分句、中文分词、导入词典基本用法 参考链接:...
  • *【多语言】目前支持主流语言:中文中文繁体,英语,日语,法语,德语 *【单词本】收藏喜欢的单词 *【历史记录】记录翻译记录 *【离线翻译】如果已经翻译过的即使没有网络也能翻译 *【数据备份和恢复】备份历史...
  • LJCorpus中文语料库分析软件是一套专门针对中文生语料库的加工、抽取、统计与翻译全自动的综合语料分析系统,应用了领先的汉语词法分析技术、新词发现技术、统计挖掘技术以及词语翻译对齐技术,目前,东北师范大学...
  • 中文分词软件

    2012-05-19 22:45:59
    包含分词、词性分析、句法分析功能的小软件
  • 这是pattern的吐槽(跳过) 1.因为工作需要,需要一个单词还原工具,... 2.然后在网上找到了 NLTK Pattern TextBlob 等工具,发现 Pattern 比较简单, 不需要先标注词性. 3.然后在windows上面开始安装 python3(不确定Pat...
  • nlp_windows_exe_ui 介绍 ...分词:使用jieba中文分词(去中断词,精确模式); 词性标注:使用jieba库里的posseg包进行词性标注; 关键词:基于lda模型结合tfidf的最合适的前六个词; 文本分类:给
  • 之前需要做一个中文命名实体识别的api,看完了一些相关论文以后觉得短时间内自己实现不大现实,于是找了一些开源工具,其中哈工大的LTP效果是很好的,但是免费使用限流量,需要给钱才行; NLPIR的pynlpir似乎还不能...
  • 对于我们每天打交道的中文来说,并没有类似英文空格的边界标志。而理解句子所包含的词语,则是理解汉语语句的第一步。汉语自动分词的任务,通俗地说,就是要由机器在文本中的词与词之间自动加上空格。 一提到自动...
  • THULAC(THU Lexical Analyzer for Chinese)由清华大学自然语言处理与社会人文计算实验室研制推出的一套中文词法分析工具包,具有中文分词和词性标注功能。THULAC具有如下几个特点: 能力强。利用我们集成的...
  • 一个可以方便的处理中文文本内容的python写的类库,受到了TextBlob的启发而写的 安装:pip install snownlp from snownlp import SnowNLP sentence = '我热爱机器学习技术' s = SnowNLP(sentence) #1.分词 s_token ...
  • THULAC(THU Lexical Analyzer for Chinese)由清华大学自然语言处理与社会人文计算实验室研制推出的一套中文词法分析工具包,具有中文分词和词性标注功能。THULAC具有如下几个特点: 能力强。利用我们集成的目前...
  • SnowNLP一个可以方便的处理中文文本内容的python写的类库,受到了TextBlob的启发而写的安装:pip install snownlp ‍fromsnownlpimp...
  • 成语词目、拼音、近(反)义词、歇后语、灯谜面、用法、中文(日语、法语、德语、英语、俄语、西班牙语、葡萄牙语、拉丁语、意大利语)解释、成语出处、举例、故事、检索码、常用性、产生年代、结构、词性等属性。...
  • 中文(还有日语、越南语、藏语等)的文本不像西方屈折语的文本,词与词之间没有空格之类的标注来显示指示词的边界,因此,自动分词成了文本处理的首要基础性工作。  汉语自动分词的基本问题。1,分词规范问题:
  • 这是一套基于词频词典的机械式中文分词引擎,它能将一整段的中文文本基本正确地切分成词。词是中文的最小语素单位,但在书写时并不像英语会在词之间用空格分开,所以如何准确并快速分词一直是中文分词的攻关难点。 ...
  • SnowNLP是一个python写的类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和TextBlob不同的是,这里...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,217
精华内容 1,286
关键字:

中文词性软件