精华内容
下载资源
问答
  • 英文分词

    2021-01-18 10:38:12
    大佬们,请问对英文文本进行分词的时候,如何保留特定的名词,比如:I do not like the United States. 如果正常分词,就会把the United States分成3个词,显然不是我想要的结果。 望大佬不吝赐教,留下python实现的...
  • Jieba、NLTK等中英文分词工具进行分词

    万次阅读 多人点赞 2019-03-20 23:03:40
    英文分词工具进行分词并对不同分词工具产生的结果进行简要对比分析。 实验工具: 中文 Jieba(重点),尝试三种分词模式与自定义词典功能、SnowNLP、THULAC、NLPIR、StanfordCoreNLP、 英文 NLTK、SpaCy、...

    实验目的:

    利用给定的中英文文本序列(见 Chinese.txt 和 English.txt),分别利用以下给定的中

    英文分词工具进行分词并对不同分词工具产生的结果进行简要对比分析。

     

    实验工具:

    中文 Jieba(重点),尝试三种分词模式与自定义词典功能、SnowNLP、THULAC、NLPIR、StanfordCoreNLP、

    英文 NLTK、SpaCy、StanfordCoreNLP

     

    实验环境:

    语言:Python 3.7.0

    IDE: Pycharm

    需要使用 pip 安装很多包,这里请大家去搜索相关教程安装

     

    实验步骤:

    首先进行中文分词:

    一、jieba

    import jieba
    import re
    Chinese=‘央视315晚会曝光湖北省知名的神丹牌、莲田牌“土鸡蛋”实为普通鸡蛋冒充,同时在商标上玩猫腻,分别注册“鲜土”、注册“好土”商标,让消费者误以为是“土鸡蛋”。3月15日晚间,新京报记者就此事致电湖北神丹健康食品有限公司方面,其工作人员表示不知情,需要了解清楚情况,截至发稿暂未取得最新回应。新京报记者还查询发现,湖北神丹健康食品有限公司为农业产业化国家重点龙头企业、高新技术企业,此前曾因涉嫌虚假宣传“中国最大的蛋品企业”而被罚6万元。’
    
    str=re.sub('[^\w]','',chinese)   #使用正则去符号,之后都是用这个str字符串
    
    seg_list=jieba.cut(s_list, cut_all=False) #精确模式
    print('/'.join(seg_list))

    分词的结果:

    央视/315/晚会/曝光/湖北省/知名/的/神丹/牌莲田牌/土/鸡蛋/实为/普通/鸡蛋/冒充/同时/在/商标/上/玩/猫腻/分别/注册/鲜土/注册/好土/商标/让/消费者/误以为/是/土/鸡蛋/3/月/15/日/晚间/新/京报/记者/就/此事/致电/湖北/神丹/健康/食品/有限公司/方面/其/工作人员/表示/不知情/需要/了解/清楚/情况/截至/发稿/暂未/取得/最新/回应/新/京报/记者/还/查询/发现/湖北/神丹/健康/食品/有限公司/为/农业/产业化/国家/重点/龙头企业/高新技术/企业/此前/曾/因涉嫌/虚假/宣传/中国/最大/的/蛋品/企业/而/被/罚/6/万元

    载入自创建的词典

    使用 jieba.load_userdict(file)

    file=open(dict,'r')   # 载入一个词典,这个词典的内容为:神丹牌、莲花牌、土鸡蛋、新京报
    jieba.load_userdict(file)
    file.close()
    seg_list=jieba.cut(str, cut_all=False) #精确模式  str 为之前的字符串
    print('/'.join(seg_list))

    结果:

    央视/315/晚会/曝光/湖北省/知名/的/神丹牌/莲田牌/土鸡蛋/实为/普通/鸡蛋/冒充/同时/在/商标/上/玩/猫腻/分别/注册/鲜土/注册/好土/商标/让/消费者/误以为/是/土鸡蛋/3/月/15/日/晚间/新京报/记者/就/此事/致电/湖北/神丹/健康/食品/有限公司/方面/其/工作人员/表示/不知情/需要/了解/清楚/情况/截至/发稿/暂未/取得/最新/回应/新京报/记者/还/查询/发现/湖北/神丹/健康/食品/有限公司/为/农业/产业化/国家/重点/龙头企业/高新技术/企业/此前/曾/因涉嫌/虚假/宣传/中国/最大/的/蛋品/企业/而/被/罚/6/万元

    显然载入词典之后,神丹牌、莲花牌、土鸡蛋、新京报合在了一起

    二、SnowNlp

    from snownlp import SnowNLP
    s=SnowNLP(str)   #str为之前去掉符号的中文字符串
    print(s.words)   #进行分词
    print(s.pinyin)  #得到拼音
    print(s.summary(3)) #进行总结 summary
    print(s.keywords(3)) # 得到关键词
    print(s.han)  #把繁体字变成简体字
    

    分词的结果:是一个列表

    ['央视', '315', '晚会', '曝光', '湖北省', '知名', '的', '神丹', '牌', '莲', '田', '牌', '土', '鸡蛋', '实', '为', '普通', '鸡蛋', '冒充', '同时', '在', '商标', '上', '玩猫', '腻', '分别', '注册', '鲜', '土', '注册', '好', '土', '商标', '让', '消费者', '误', '以为', '是', '土', '鸡蛋', '3', '月', '15', '日', '晚间', '新京', '报', '记者', '就', '此事', '致电', '湖北', '神', '丹', '健康', '食品', '有限公司', '方面', '其', '工作', '人员', '表示', '不', '知情', '需要', '了解', '清楚', '情况', '截至', '发稿', '暂', '未', '取得', '最新', '回应', '新京', '报', '记者', '还', '查询', '发现', '湖北', '神', '丹', '健康', '食品', '有限公司', '为', '农业', '产业化', '国家', '重点', '龙头', '企业', '高新技术', '企业', '此前', '曾', '因', '涉嫌', '虚假', '宣传', '中国', '最', '大', '的', '蛋品', '企业', '而', '被', '罚', '6', '万', '元']

    三、Thulac

    t=thulac.thulac()  #进行分词和标注词性
    text=t.cut(str,text=False) #进行分词和标注词性,若text=True 则为 str,否则为默认模式返回值为list
    print(text)
    

    [['央视', 'v'], ['315', 'm'], ['晚会', 'n'], ['曝光', 'v'], ['湖北省', 'ns'], ['知名', 'a'], ['的', 'u'], ['神丹牌', 'nz'], ['莲田牌', 'nz'], ['土鸡蛋', 'n'], ['实', 'a'], ['为', 'v'], ['普通', 'a'], ['鸡蛋', 'n'], ['冒充', 'v'], ['同时', 'd'], ['在', 'p'], ['商标', 'n'], ['上', 'f'], ['玩', 'v'], ['猫腻', 'n'], ['分别', 'd'], ['注册', 'v'], ['鲜土', 'n'], ['注册', 'v'], ['好', 'a'], ['土', 'n'], ['商标', 'n'], ['让', 'v'], ['消费者', 'n'], ['误', 'd'], ['以为', 'v'], ['是', 'v'], ['土鸡蛋', 'n'], ['3月', 't'], ['15日', 't'], ['晚间', 't'], ['新', 'a'], ['京报', 'n'], ['记者', 'n'], ['就', 'p'], ['此事', 'r'], ['致电', 'v'], ['湖北', 'ns'], ['神丹', 'nz'], ['健康', 'a'], ['食品', 'n'], ['有限公司', 'n'], ['方面', 'n'], ['其', 'r'], ['工作', 'v'], ['人员', 'n'], ['表示', 'v'], ['不', 'd'], ['知情', 'v'], ['需要', 'v'], ['了', 'u'], ['解', 'v'], ['清楚', 'a'], ['情况', 'n'], ['截至', 'v'], ['发稿', 'v'], ['暂', 'd'], ['未', 'd'], ['取得', 'v'], ['最新', 'a'], ['回应', 'v'], ['新', 'a'], ['京报', 'n'], ['记者', 'n'], ['还', 'd'], ['查询', 'v'], ['发现', 'v'], ['湖北', 'ns'], ['神丹', 'nz'], ['健康', 'a'], ['食品', 'n'], ['有限公司', 'n'], ['为', 'p'], ['农业', 'n'], ['产业化', 'v'], ['国', 'm'], ['家', 'q'], ['重点', 'n'], ['龙头', 'n'], ['企业', 'n'], ['高新技术', 'n'], ['企业', 'n'], ['此前', 't'], ['曾', 'd'], ['因', 'p'], ['涉嫌', 'v'], ['虚假', 'a'], ['宣传', 'v'], ['中国', 'ns'], ['最', 'd'], ['大', 'a'], ['的', 'u'], ['蛋品', 'n'], ['企业', 'n'], ['而', 'c'], ['被', 'p'], ['罚', 'v'], ['6万', 'm'], ['元', 'q']]

    t2=thulac.thulac(seg_only=True)  #只进行分词 segment

    则只进行分词,不标注词性

    四、Pynlpir

    pynlpir.open()
    print(pynlpir.segment(str)) #分词
    

    [('央', 'verb'), ('视', 'verb'), ('315', 'numeral'), ('晚会', 'noun'), ('曝光', 'verb'), ('湖北省', 'noun'), ('知名', 'adjective'), ('的', 'particle'), ('神', 'noun'), ('丹', 'distinguishing word'), ('牌', 'noun'), ('、', 'punctuation mark'), ('莲', 'noun'), ('田', 'noun'), ('牌', 'noun'), ('“', 'punctuation mark'), ('土', 'noun'), ('鸡蛋', 'noun'), ('”', 'punctuation mark'), ('实', 'adjective'), ('为', 'verb'), ('普通', 'adjective'), ('鸡蛋', 'noun'), ('冒充', 'verb'), (',', 'punctuation mark'), ('同时', 'conjunction'), ('在', 'preposition'), ('商标', 'noun'), ('上', 'noun of locality'), ('玩', 'verb'), ('猫腻', 'noun'), (',', 'punctuation mark'), ('分别', 'adverb'), ('注册', 'verb'), ('“', 'punctuation mark'), ('鲜', 'adjective'), ('土', 'noun'), ('”', 'punctuation mark'), ('、', 'punctuation mark'), ('注册', 'verb'), ('“', 'punctuation mark'), ('好', 'adjective'), ('土', 'noun'), ('”', 'punctuation mark'), ('商标', 'noun'), (',', 'punctuation mark'), ('让', 'verb'), ('消费者', 'noun'), ('误', 'adverb'), ('以为', 'verb'), ('是', 'verb'), ('“', 'punctuation mark'), ('土', 'noun'), ('鸡蛋', 'noun'), ('”', 'punctuation mark'), ('。', 'punctuation mark'), ('3月', 'time word'), ('15日', 'time word'), ('晚间', 'time word'), (',', 'punctuation mark'), ('新京报', None), ('记者', 'noun'), ('就', 'adverb'), ('此事', 'pronoun'), ('致电', 'verb'), ('湖北', 'noun'), ('神', 'noun'), ('丹', 'distinguishing word'), ('健康', 'adjective'), ('食品', 'noun'), ('有限公司', 'noun'), ('方面', 'noun'), (',', 'punctuation mark'), ('其', 'pronoun'), ('工作', 'verb'), ('人员', 'noun'), ('表示', 'verb'), ('不', 'adverb'), ('知', 'verb'), ('情', 'noun'), (',', 'punctuation mark'), ('需要', 'verb'), ('了解', 'verb'), ('清楚', 'adjective'), ('情况', 'noun'), (',', 'punctuation mark'), ('截至', 'verb'), ('发稿', 'verb'), ('暂', 'adverb'), ('未', 'adverb'), ('取得', 'verb'), ('最新', 'adjective'), ('回应', 'verb'), ('。', 'punctuation mark'), ('新京报', None), ('记者', 'noun'), ('还', 'adverb'), ('查询', 'verb'), ('发现', 'verb'), (',', 'punctuation mark'), ('湖北', 'noun'), ('神', 'noun'), ('丹', 'distinguishing word'), ('健康', 'adjective'), ('食品', 'noun'), ('有限公司', 'noun'), ('为', 'preposition'), ('农业', 'noun'), ('产业化', 'verb'), ('国家', 'noun'), ('重点', 'noun'), ('龙头', 'noun'), ('企业', 'noun'), ('、', 'punctuation mark'), ('高新技术', 'noun'), ('企业', 'noun'), (',', 'punctuation mark'), ('此前', 'time word'), ('曾', 'adverb'), ('因', 'preposition'), ('涉嫌', 'verb'), ('虚假', 'adjective'), ('宣传', 'verb'), ('“', 'punctuation mark'), ('中国', 'noun'), ('最', 'adverb'), ('大', 'adjective'), ('的', 'particle'), ('蛋品', 'noun'), ('企业', 'noun'), ('”', 'punctuation mark'), ('而', 'conjunction'), ('被', 'preposition'), ('罚', 'verb'), ('6万', 'numeral'), ('元', 'classifier'), ('。', 'punctuation mark')]

    五、StanfordCoreNLP:

    nlp=StanfordCoreNLP(r'G:\\stanford-corenlp-full-2018-10-05\\stanford-corenlp-full-2018-10-05',lang='zh')
    print(nlp.word_tokenize(s_list)) #返回一个列表
    # print(nlp.pos_tag(str))  #词性标注
    # print(nlp.parse(str))  #解析 
    

     结果:

    ['央视', '315', '晚会', '曝光', '湖北省', '知名', '的', '神丹', '牌', '莲', '田', '牌', '土', '鸡蛋', '实为', '普通', '鸡蛋', '冒充', '同时', '在', '商标', '上', '玩', '猫腻', '分别', '注册', '鲜土', '注册', '好', '土', '商标', '让', '消费者', '误以为', '是', '土', '鸡蛋', '3月', '15日', '晚间', '新京报', '记者', '就此事', '致电', '湖北', '神丹', '健康', '食品', '有限', '公司', '方面', '其', '工作', '人员', '表示', '不知情', '需要', '了解', '清楚', '情况', '截至', '发稿', '暂', '未', '取得', '最新', '回应', '新京报', '记者', '还', '查询', '发现', '湖北', '神丹', '健康', '食品', '有限', '公司', '为', '农业', '产业化', '国家', '重点', '龙头', '企业', '高', '新', '技术', '企业', '此前', '曾', '因', '涉嫌', '虚假', '宣传', '中国', '最', '大', '的', '蛋品', '企业', '而', '被', '罚', '6万', '元']

    进行英文分词:

    Englisth=‘Trump was born and raised in the New York City borough of Queens and received an economics degree from the Wharton School. He was appointed president of his family's real estate business in 1971, renamed it The Trump Organization, and expanded it from Queens and Brooklyn into Manhattan. The company built or renovated skyscrapers, hotels, casinos, and golf courses. Trump later started various side ventures, including licensing his name for real estate and consumer products. He managed the company until his 2017 inauguration. He co-authored several books, including The Art of the Deal. He owned the Miss Universe and Miss USA beauty pageants from 1996 to 2015, and he produced and hosted The Apprentice, a reality television show, from 2003 to 2015. Forbes estimates his net worth to be $3.1 billion.’

    六、nltk:

    import nltk
    import re
    english='H:\\自然语言处理\\Experiment2\\English.txt'
    with open(english,'r',encoding='utf-8') as file:
        u=file.read()
    str=re.sub('[^\w ]','',u)
    print(nltk.word_tokenize(str))
    print(nltk.pos_tag(nltk.word_tokenize(str))) #对分完词的结果进行词性标注

    结果:

    ['Trump', 'was', 'born', 'and', 'raised', 'in', 'the', 'New', 'York', 'City', 'borough', 'of', 'Queens', 'and', 'received', 'an', 'economics', 'degree', 'from', 'the', 'Wharton', 'School', 'He', 'was', 'appointed', 'president', 'of', 'his', 'familys', 'real', 'estate', 'business', 'in', '1971', 'renamed', 'it', 'The', 'Trump', 'Organization', 'and', 'expanded', 'it', 'from', 'Queens', 'and', 'Brooklyn', 'into', 'Manhattan', 'The', 'company', 'built', 'or', 'renovated', 'skyscrapers', 'hotels', 'casinos', 'and', 'golf', 'courses', 'Trump', 'later', 'started', 'various', 'side', 'ventures', 'including', 'licensing', 'his', 'name', 'for', 'real', 'estate', 'and', 'consumer', 'products', 'He', 'managed', 'the', 'company', 'until', 'his', '2017', 'inauguration', 'He', 'coauthored', 'several', 'books', 'including', 'The', 'Art', 'of', 'the', 'Deal', 'He', 'owned', 'the', 'Miss', 'Universe', 'and', 'Miss', 'USA', 'beauty', 'pageants', 'from', '1996', 'to', '2015', 'and', 'he', 'produced', 'and', 'hosted', 'The', 'Apprentice', 'a', 'reality', 'television', 'show', 'from', '2003', 'to', '2015', 'Forbes', 'estimates', 'his', 'net', 'worth', 'to', 'be', '31', 'billion']

    七、spacy:

    import spacy
    nlp=spacy.load('en_core_web_sm')
    document=nlp(str)
    print(document.text.split())

    结果:

    ['Trump', 'was', 'born', 'and', 'raised', 'in', 'the', 'New', 'York', 'City', 'borough', 'of', 'Queens', 'and', 'received', 'an', 'economics', 'degree', 'from', 'the', 'Wharton', 'School', 'He', 'was', 'appointed', 'president', 'of', 'his', 'familys', 'real', 'estate', 'business', 'in', '1971', 'renamed', 'it', 'The', 'Trump', 'Organization', 'and', 'expanded', 'it', 'from', 'Queens', 'and', 'Brooklyn', 'into', 'Manhattan', 'The', 'company', 'built', 'or', 'renovated', 'skyscrapers', 'hotels', 'casinos', 'and', 'golf', 'courses', 'Trump', 'later', 'started', 'various', 'side', 'ventures', 'including', 'licensing', 'his', 'name', 'for', 'real', 'estate', 'and', 'consumer', 'products', 'He', 'managed', 'the', 'company', 'until', 'his', '2017', 'inauguration', 'He', 'coauthored', 'several', 'books', 'including', 'The', 'Art', 'of', 'the', 'Deal', 'He', 'owned', 'the', 'Miss', 'Universe', 'and', 'Miss', 'USA', 'beauty', 'pageants', 'from', '1996', 'to', '2015', 'and', 'he', 'produced', 'and', 'hosted', 'The', 'Apprentice', 'a', 'reality', 'television', 'show', 'from', '2003', 'to', '2015', 'Forbes', 'estimates', 'his', 'net', 'worth', 'to', 'be', '31', 'billion']

    八、StanfordcoreNLP:

    nlp=StanfordCoreNLP(r'G:\\stanford-corenlp-full-2018-10-05\\stanford-corenlp-full-2018-10-05',lang='en')
    print(nlp.word_tokenize(str))

    结果;

    ['Trump', 'was', 'born', 'and', 'raised', 'in', 'the', 'New', 'York', 'City', 'borough', 'of', 'Queens', 'and', 'received', 'an', 'economics', 'degree', 'from', 'the', 'Wharton', 'School', 'He', 'was', 'appointed', 'president', 'of', 'his', 'familys', 'real', 'estate', 'business', 'in', '1971', 'renamed', 'it', 'The', 'Trump', 'Organization', 'and', 'expanded', 'it', 'from', 'Queens', 'and', 'Brooklyn', 'into', 'Manhattan', 'The', 'company', 'built', 'or', 'renovated', 'skyscrapers', 'hotels', 'casinos', 'and', 'golf', 'courses', 'Trump', 'later', 'started', 'various', 'side', 'ventures', 'including', 'licensing', 'his', 'name', 'for', 'real', 'estate', 'and', 'consumer', 'products', 'He', 'managed', 'the', 'company', 'until', 'his', '2017', 'inauguration', 'He', 'coauthored', 'several', 'books', 'including', 'The', 'Art', 'of', 'the', 'Deal', 'He', 'owned', 'the', 'Miss', 'Universe', 'and', 'Miss', 'USA', 'beauty', 'pageants', 'from', '1996', 'to', '2015', 'and', 'he', 'produced', 'and', 'hosted', 'The', 'Apprentice', 'a', 'reality', 'television', 'show', 'from', '2003', 'to', '2015', 'Forbes', 'estimates', 'his', 'net', 'worth', 'to', 'be', '31', 'billion']

    以上就是八种分词工具的分词过程,我建议:中文分词使用 jieba进行分词,英文使用 NLTK进行分词。

     

     

     

     

     

     

     

    展开全文
  • 英文分词工具

    2012-10-28 20:15:33
    这是一个英文分词工具里面有详细的介绍使用方法
  • 英文分词和中文分词

    2019-10-02 03:12:19
    英文分词 由于英语的基本组成单位就是词,所以相对来说简单很多。 大致分为三步(3S): 根据空格拆分单词(Split) 排除停止词(Stop Word) 提取词干(Stemming) 1、根据空格拆分单词 这一步是是最简单的...

    英文分词

    由于英语的基本组成单位就是词,所以相对来说简单很多。

    大致分为三步(3S):

    根据空格拆分单词(Split)
    排除停止词(Stop Word
    提取词干(Stemming

    1、根据空格拆分单词

    这一步是是最简单的一步,英语的句子基本上就是由标点符号、空格和词构成,那么只要根据空格和标点符号将词语分割成数组即可。

    如“Nobody knows how ancient people started using fire”分割成{"Nobody","knows","how","ancient","people","started","using","fire"}。

    2、排除停止词

    停止词,是由英文单词:stopword翻译过来的,原来在英语里面会遇到很多a,the,or等使用频率很多的字或词,常为冠词、介词、副词或连词等。如果搜索引擎要将这些词都索引的话,那么几乎每个网站都会被索引,也就是说工作量巨大。可以毫不夸张的说句,只要是个英文网站都会用到a或者是the。那么这些英文的词跟我们中文有什么关系呢? 在中文网站里面其实也存在大量的stopword,我们称它为停止词。比如,我们前面这句话,“在”、“里面”、“也”、“的”、“它”、“为”这些词都是停止词。这些词因为使用频率过高,几乎每个网页上都存在,所以搜索引擎开发人员都将这一类词语全部忽略掉。如果我们的网站上存在大量这样的词语,那么相当于浪费了很多资源。

    常见停止词请看附录:http://www.cybermkd.com/stop-word-list/

    如{"Nobody","knows","how","ancient","people","started","using","fire"}去掉停止词后得到 {"Nobody","ancient","people","started","fire"}

    3、提取词干

    提取词干是西方语言特有的处理,比如说英文单词有 单数复数的变形,-ing和-ed的变形,但是在计算相关性的时候,应该当做同一个单词。比如 apple和apples,doing和done是同一个词,提取词干的目的就是还原成最基本的词。

    同时我们可以将所有的大小写统一。

    {"Nobody","ancient","people","started","fire"}处理成{"nobody","ancient","people","start","fire"}

    经过上面三个步骤基本上一个英文句子就处理完了。

     

     

    中文分词

    对于中文而言,词是承载语义的最小单元,由词构成语句,又由语句构成篇章。但是,中文文本是由连续的字序列构成,词与词之间是没有天然的分隔符 ,所以中文分词相对来说困难很多。中文分词目前来说基本上都还是基于分词用的词典来进行分词的,将字和字组成不同的词然后放入词典中查找。

    中文分词面临着相当多的挑战,首当其冲的就是歧义问题,不同的分割方式会导致不同的意思。

    如:结婚/的/和尚/未/结婚/的 和 结婚/的/和/尚未/结婚/的

    还有个重要的挑战就是未登录词,用人话就是没有收录进词典的词,人名就是最简单的例子,还有就是网友发明的词,诸如:“草泥马”、“不明觉厉”之类云云。

    所以一个好的分词词典是决定中文分词质量的关键,还有就是做中文分词的话必须经常更新、与时俱进。

    大致可以将中文分词算法分为两种:

    1、词典分词

    词典分词简单来说就是直接将句子拆成字,然后字和字组合进入词典中匹配,这种方式虽然简单直接但是容易引起歧义问题。比如jieba分词。

    2、基于统计的分词

    通过人工标注,对中文建模然后将准备好的语料进行训练,通过计算不同阶段下出现的概率并选出概率最大的情况作为结果来进行分词。

    这种分词方法虽然能尽量避免分词导致的歧义,但却需要耗费相当大的性能。

    还有一种是基于语义,但是目前还没有很好的方案所以姑且不议。

    在常见的分词中建议是使用第一种,并且将常见的、唯一的词如地名、人名等等先单独建个词库,分词前先将这些词提取出来然后再进行分词。然后可以针对自身的情况的建一个歧义纠正词库,将一些分词结果进行纠正。

    如分词结果为“王/小明”(这个名字在未登录的情况下),但是在纠正词库中已经记录了“王小明”,所以最终结果为“王小明”。

    转载于:https://www.cnblogs.com/yako/p/6805717.html

    展开全文
  • Elasticsearch 英文分词 & 中文分词

    千次阅读 2020-10-17 07:53:56
    对于倒排索引来说,很重要的一件事情就是需要对文本进行分词,经过分词可以获取...英文分词 在Elasticsearch 中共支持5种不同的分词模式,在不同的场景下发挥不同的效果。 standard (过滤标点符号) GET /_analyze { ".

    对于倒排索引来说,很重要的一件事情就是需要对文本进行分词,经过分词可以获取情感、词性、质性、词频等等的数据。

    Elasticsearch 分词工作原理

    在 Elasticsearch 中进行行分词的需要经过分析器的3个模块,字符过滤器将文本进行替换或者删除,在由分词器进行拆分成单词,最后由Token过滤器将一些无用语气助词删掉。
    在这里插入图片描述

    英文分词

    在Elasticsearch 中共支持5种不同的分词模式,在不同的场景下发挥不同的效果。

    standard (过滤标点符号)
    GET /_analyze
    {
      "analyzer": "standard",
      "text": "The programmer's holiday is 1024!"
    }
    

    在这里插入图片描述

    simple (过滤数字和标点符号)
    GET /_analyze
    {
      "analyzer": "simple",
      "text": "The programmer's holiday is 1024!"
    }
    

    在这里插入图片描述

    whitespace (不过滤,按照空格分隔)
    GET /_analyze
    {
      "analyzer": "whitespace",
      "text": "The programmer's holiday is 1024!"
    }
    

    在这里插入图片描述

    stop (过滤停顿单词及标点符号,例如is are等等)
    GET /_analyze
    {
      "analyzer": "stop",
      "text": "The programmer's holiday is 1024!"
    }
    

    在这里插入图片描述

    keyword (视为一个整体不进行任何处理)
    GET /_analyze
    {
      "analyzer": "keyword",
      "text": "The programmer's holiday is 1024!"
    }
    

    在这里插入图片描述

    中文分词

    因为 Elasticsearch 默认的分词器只能按照单字进行拆分,无法具体分析其语意等,所以我们使用 analysis-icu 来代替默认的分词器。

    GET /_analyze
    {
      "analyzer": "standard",
      "text": "南京市长江大桥"
    }
    

    在这里插入图片描述

    通过命令./bin/elasticsearch-plugin install analysis-icu进行安装

    GET /_analyze
    {
      "analyzer": "icu_analyzer",
      "text": "南京市长江大桥"
    }
    

    在这里插入图片描述

    其他的中文分词器

    elasticsearch-thulac-plugin 支持中文分词和词性标注功能
    https://github.com/microbun/elasticsearch-thulac-plugin

    elasticsearch-analysis-ik 支持热更新分词字典及自定义词库
    https://github.com/medcl/elasticsearch-analysis-ik

    展开全文
  • 英文分词算法

    2013-01-21 16:09:20
    由KaiToo搜索开发的一款基于字典的简单中英文分词算法 主要功能: 中英文分词,未登录词识别,多元歧义自动识别,全角字符识别能力
  • 英文分词统计词频

    2014-01-18 14:33:25
    一个小小的英文分词并统计词频程序 并用Jfreechart实现了图表化
  • 以上用例是使用 analyzer 指定英文分词器查看分词结果,如果field是索引里的字段,会使用字段指定的分词器进行分词。 接下来进入测试。 默认分词器 默认使用stander分词器 在不标明的时候都是使用默认的stander...

    注:测试环境:CentOS Linux release 7.6.1810 (Core) 
    jdk:1.8
    elasticsearch:6.8.2 单节点

    es       安装:https://blog.csdn.net/qq_33743572/article/details/108175092
    es添加索引:https://blog.csdn.net/qq_33743572/article/details/108231558

    导图(用于总结和复习)

    注:使用 GET _analyze 可以使用分词器查看分词结果,例:

    image.png

    以上用例是使用 analyzer 指定英文分词器查看分词结果,如果field是索引里的字段,会使用字段指定的分词器进行分词。

    接下来进入测试。

    默认分词器

    默认使用stander分词器

    在不标明的时候都是使用默认的stander分词

    在建索引的时候,使用 analyzer 指定字段分词器

    测试数据:

    #1.删除 /test下的测试数据
    DELETE /test/
    
    #2.给字段添加限制类型,使用analyzer添加分词方式,不标明的时候默认使用stander分词器,也可以标明english使用英文分词器
    PUT /test
    {
      "settings": {
        "number_of_shards": 1,
        "number_of_replicas": 1
      },
      "mappings": {
        "_doc":{
          "properties":{
            "name":{"type":"text"},
            "age":{"type":"integer"},
            "introduce":{"type":"text","analyzer":"english"}
          }
        }
      }
    }
    
    #3.添加测试数据:李雷
    PUT /test/_doc/1
    {
      "name":"李雷",
      "age":12,
      "engname":"Lilei",
      "introduce":"My name is Lilei, I like eating apples and running"
    }
    
    #4.使用“李小雷”测试查询
    GET /test/_search
    {
      "query": {
        "match": {
          "name": "李小雷"
        }
      }
    }

    image.png

    分别执行以上的测试脚本,最后发现使用“李小雷”也能搜索出 name 为“李雷”的文档。这是因为 name 默认使用了 stander 分词器。可以通过以下方法查看分词器的分词结果。例:

    image.png

    这里field使用name,就会使用name的默认分词器stander

    可以看到 stander 分词器会把中文拆分成一个一个的汉字,搜索条件只需要满足一个汉字就能搜索出结果,所以“李小雷”能搜索到“李雷”。中文一般不建议直接使用这种分词器,否则没有效果了,后面会介绍中文分词器

    英文分词器

    image.png

    这里field使用introduce,就会使用introduce的分词器english。

    英文分词器会把单词的 词干 提取出来。当我们使用条件搜索的时候,也会提取查询单词的 词干 与分词结果匹配,所以搜索的时候只要有满足分词结果的 词干 就会有搜索结果。

    image.png

    使用 "appl" 和 "apples" 可以搜索到结果,因为搜索的时候都会解析成"appl"。但是如果使用app就不能搜索到结果,因为app跟english分词器的分词结果appl不匹配。

    中文分词器

    中文分词需要安装插件:analysis-ik

    网址:https://github.com/medcl/elasticsearch-analysis-ik

     

    安装命令:

    1.进入es主目录:cd /usr/lib/elasticsearch/elasticsearch-0/

    2.执行安装命令:./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.8.2/elasticsearch-analysis-ik-6.8.2.zip

    注意版本号一定要对应

     

    安装完成后

    cd plugins

    image.png

    说明已经安装好了

    安装好后可以进词库文件查看词库,命令:

    cd /usr/lib/elasticsearch/elasticsearch-0/config/analysis-ik/

    vi main.dic

    image.png

    词库量很大不做展示。接下来做测试。

     

    测试脚本(需要删除历史数据重新创建):

    #1.删除 /test下的测试数据
    DELETE /test/
    
    #2.给字段添加限制类型,使用analyzer添加分词方式,不标明的时候默认使用stander分词器,也可以标明english使用英文分词器
    PUT /test
    {
      "settings": {
        "number_of_shards": 1,
        "number_of_replicas": 1
      },
      "mappings": {
        "_doc":{
          "properties":{
            "name":{"type":"text"},
            "age":{"type":"integer"},
            "introduce":{"type":"text","analyzer":"english"},
            "address":{"type":"text","analyzer":"ik_max_word"},
            "address2":{"type":"text","analyzer":"ik_smart"}
          }
        }
      }
    }
    
    #3.添加测试数据:李雷
    PUT /test/_doc/1
    {
      "name":"李雷",
      "age":12,
      "engname":"Lilei",
      "introduce":"My name is Lilei, I like eating apples and running",
      "address":"我家住在南京市长江大桥",
      "address2":"我家住在南京市长江大桥"
    }
    
    #4.测试中文分词
    GET /test/_search
    {
      "query": {
        "match": {
          "address": "南京市"
        }
      }
    }
    
    
    #测试中文分词器ik_max_word
    GET /test/_analyze
    {
      "field": "address",
      "text" : "我家住在南京市长江大桥"
    }
    #测试中文分词器ik_smart
    GET /test/_analyze
    {
      "field": "address2",
      "text" : "我家住在南京市长江大桥"
    }

    analysis-ik 插件支持两种分词器:

    第一种是 ​ik_max_word 分词器

    这种分词器几乎会把所有词汇进行分词。例:

    注意:使用GET方法测试分词结果。"field": "address"的时候,就会使用address指定的分词器 ik_max_word

    image.png

    在进行搜索的时候,只用满足其中的一个词汇就能搜索到结果,例:

    image.png

    关键词“南京”可以在分词结果里找到,所以可以搜索到结果。其他像“我”、“我家”、“住在”这些包含在分词结果里的词汇都可以搜索到结果,但是用“住”就不能找到,因为“住”不在分词结果里。使用“我家住”能找到,因为满足了“我”或者“我家”。

    第二种是 ik_smart 分词器

    注意:使用GET方法测试分词结果。"field": "address2"的时候,就会使用 address2 指定的分词器 ik_smart

    image.png

    ik_smart 分词的粒度就粗很多。搜索的时候满足其中的词汇就能搜索出结果。例:

    image.png

    这两种分词器该怎么配合使用呢?

    在建索引的时候使用 ik_max_word 分词器,这样分的词可以更细。

    在搜索的时候使用 ik_smart 分词器,这样在搜索的时候分的词粒度更粗,只用查更少的词,能提高效率。

    例:

    image.png

    这么配置就可以在搜索的时候使用 ik_smart 分词器,建索引的时候使用 ik_max_word 分词器了。

    展开全文
  • sphinx 中英文分词快速检索 大数据快速搜索
  • 英文分词 英文原文:it is a good day! 分词结果:it, is,a, good, day, ! 通过上面的英文分词例子,可以发现英文文本词与词之间有空格或者标点符号,如果想要对这种普通的英文文本进行分词的话是不需要什么算法...
  • JavaScript英文分词

    千次阅读 2014-10-19 21:34:17
    英文分词是搜索,文本分析中很常用的一种技术。最近有一个作业是实现一个分词系统,用JavaScript尝试了一下,完成之后觉得下次可能会使用Python来实现,因为相应的库可能会多一些。
  • Python 英文分词

    万次阅读 2015-12-03 20:19:14
    Python 英文分词,词倒排索引,一般多次查询 ''' Created on 2015-11-18 ''' #encoding=utf-8 # List Of English Stop Words # http://armandbrahaj.blog.al/2009/04/14/list-of-english-stop-words/ _WORD_MIN_...
  • jieba nltk 进行中英文分词

    千次阅读 2020-01-14 10:38:14
    Jieba、NLTK等中英文分词工具进行分词 建议:中文分词使用 jieba(SnowNlp、THULAC、NLPIR、StanfordCoreNLP)进行分词,英文使用 NLTK进行分词;还有git上的一个英文文本分词(无空格)模块wordninja。 1.中文分词 1....
  • 使用NLTK进行英文分词

    2020-08-20 14:52:03
    使用NLTK进行英文分词 import nltk import re english='C:\\Users\\pc\\CapStone\\english.txt' with open(english,'r',encoding='utf-8') as file: u=file.read() str=re.sub('[^\w ]','',u) print(nltk.word_...
  • 基于Python的中英文分词基础:正则表达式和jieba开场白正则表达式jieba分词器 正则表达式 jieba分词器
  • 利用NLTK做中英文分词

    千次阅读 2020-04-01 14:48:17
    美图欣赏: 一.NLTK环境配置 1.安装nltk包(如果开始能装 忽然爆红 多装几次) pip install nltk 2.在python consol里面 //1.... import nltk ...//2....利用NLTK做英文分词 这里选用的是anaconda做...
  • 英文分词组件。完全C#托管代码编写,独立开发。 技术特点 ========= 1. 识别率接近90%。 虽然和专业分词系统相比有一定的差距,但对于搜索引擎等小型分词需求而言足够了。 2. 多元歧义自动识别。 对于前后...
  • 自然语言处理中的中英文分词工具jieba中文分词jieba库的安装jieba的基本功能jieba简单运用nltk英文分词nltk及nltk_data的安装nltk的基本功能nltk的简单运用总结 分词是自然语言处理的基础,分词的准确度直接决定了...
  • 英文分词主要是将各种时态形式的单词映射会同一种形式便于计算机理解。本文将列举一种基于词干分词的算法,这种算法建立在对英文构词法的充分了解上,所以代码中对各种形式的词汇的构词进行了拆解。英文分词的目标是...
  • 英文 分词

    2013-08-05 15:49:32
    英文的 停用词删除 词干提取 中文分词 含绝大部分代码
  • 英文分词,根据字典的词对英文无空格的词序列进行分解
  • 英文分词工具有很多,今天我们来使用Jieba分词、SnowNlp分词、nltk分词、thunlp分词、NLPIR分词、Stanford分词等六种分词工具来对给定中英文文本进行分词。 一、Jieba分词 结巴分词是用于中文分词的分词工具,安装...
  • 英文分词工具有很多,今天我们来使用Jieba、SnowNlp、nltk、thunlp、NLPIR、Stanford等六种工具来对给定中英文文本进行分词、词性标注与命名实体识别。
  • 之前一直和中文的自然语言处理打交道,最近因为工作关系需要进行英文相关的自然语言处理,本以为相对较难中文的NLP都搞的定,英文的还不是手到擒来:-) 事实证明不同语系的NLP之间存在着较大的差异。中文虽然和拉丁...
  • 英文分词

    2020-12-20 19:56:45
    1.jieba 分词 # -*- coding: UTF-8 -*- from collections import Counter import jieba def stopwordslist(): stopwords = [line.strip() for line in open('stopwords_en.txt',encoding='UTF-8').readlines()] ...
  • 用VC++做的一个英文分词程序。程序运行时,要保证在D盘下有in.txt的文件,其实这个路径可以自行修改的!

空空如也

空空如也

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

英文分词