精华内容
下载资源
问答
  • 2022-01-17 17:29:32

    一、文本切分

    1.句子切分:将文本语料库分解为句子的过程

    句子切分技术,使用NLTK 框架进行切分,该框架提供用于执行句子切分的各种接口,有sent_tokenize , PunktSentenceTokenizer, RegexpTokenizer, 预先训练的句子切分模型

    import nltk
    from pprint import pprint#pprin和print功能基本一样,pprint打印出的数据结构更加完整,采用分行打印
    sample_text='We will discuss briefly about the basic syntax,structure and design philosophies. There is a defined hierarchical syntax for Python code which you should remember when writing code! Python is a really powerful programming lanuage!'
    #方法一
    sample_sentences=nltk.sent_tokenize(text=sample_text)
    #方法二
    punkt_st=nltk.tokenize.PunktSentenceTokenizer()
    sample_sentences=punkt_st.tokenize(sample_text)
    pprint(sample_sentences)
    
    》》》》
    ['We will discuss briefly about the basic syntax,structure and design '
     'philosophies.',
     'There is a defined hierarchical syntax for Python code which you should '
     'remember when writing code!',
     'Python is a really powerful programming lanuage!']

    注:在使用以上句子切分器时遇到了nltk.download('punkt')的问题,我查看了一博主nltk.download()下载失败问题解决方法,解决了问题,如遇到类似问题可以参考,非常不错!nltk.download()下载失败问题解决方法_高冷男孩不吃苹果的博客-CSDN博客_nltk下载失败nltk.download()下载失败问题解决方法https://blog.csdn.net/lcf0000/article/details/121849782?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_ecpm_v1~rank_v31_ecpm-4-121849782.pc_agg_new_rank&utm_term=nltk.download%28punkt%29&spm=1000.2123.3001.4430

    2.词语切分:将句子分割为其组成单词的过程。 

    依然在nltk框架下,主流接口有word_tokenize, TreebankWordTokenizer,RegexpTokenizer,RegexpTokenizer继承的切分器

    import nltk
    sentence="The brown for wasn't that quick and he couldn't win the race"
    words=nltk.word_tokenize(sentence)
    print(words)
    treebank_wk=nltk.TreebankWordTokenizer()
    words=treebank_wk.tokenize(sentence)
    print(words)
    
    《《《《《
    print(words)
    ['The', 'brown', 'for', 'was', "n't", 'that', 'quick', 'and', 'he', 'could', "n't", 'win', 'the', 'race']

    二、文本规范化

    一下代码加载基本依存关系和将使用的语料库

    import nltk
    import re
    import string
    from pprint import pprint
    corpus=["The brown fox wasn't that quick and couldn't win the race","Hey that's a great deal! I just bought a phone for $199", "@@You'll(learn) a **lot** in the book . Python is amazing language!@@"]
    

    1.文本清洗:删除无关不必要标识和字符

    2.文本切分:

    import nltk
    import re
    import string
    from pprint import pprint
    corpus=["The brown fox wasn't that quick and couldn't win the race","Hey that's a great deal! I just bought a phone for $199", "@@You'll(learn) a **lot** in the book . Python is amazing language!@@"]
    
    #文本切分
    def tokenize_tex(text):
        sentences=nltk.sent_tokenize(text) 
        word_tokens=[nltk.word_tokenize(sentence) for sentence in sentences]
        return word_tokens
    token_list=[tokenize_tex(text) for text in corpus]
    pprint(token_list)
    
    >>>>
    [[['The',
       'brown',
       'fox',
       'was',
       "n't",
       'that',
       'quick',
       'and',
       'could',
       "n't",
       'win',
       'the',
       'race']],
     [['Hey', 'that', "'s", 'a', 'great', 'deal', '!'],
      ['I', 'just', 'bought', 'a', 'phone', 'for', '$', '199']],
     [['@',
       '@',
       'You',
       "'ll",
       '(',
       'learn',
       ')',
       'a',
       '*',
       '*',
       'lot',
       '*',
       '*',
       'in',
       'the',
       'book',
       '.'],
      ['Python', 'is', 'amazing', 'language', '!'],
      ['@', '@']]]

    3.删除特殊字符

    def remove_characters_after_tokenization(tokens):
        pattern=re.compile('[{}]'.format(re.escape(string.punctuation)))#删除特殊字符
        filtered_tokens=list(filter(None,[pattern.sub('',token) for token in tokens]))
        return filtered_tokens
    #按以下书上的代码,我没跑出来
    filtered_list_1=[filter(None,[remove_characters_after_tokenization(tokens) for tokens in sentence_tokens]) for sentence_tokens in token_list]
    print(filtered_list_1)
    
    #这是我修改以后的代码
    sentence_list=[]
    for sentence_tokens in token_list:
        for tokens in sentence_tokens:
            print(tokens)
            sentence_list.append(remove_characters_after_tokenization(tokens))
    >>>>>
    #结果已经不含特殊字符了
    [['The',
      'brown',
      'fox',
      'was',
      'nt',
      'that',
      'quick',
      'and',
      'could',
      'nt',
      'win',
      'the',
      'race'],
     ['Hey', 'that', 's', 'a', 'great', 'deal'],
     ['I', 'just', 'bought', 'a', 'phone', 'for', '199'],
     ['You', 'll', 'learn', 'a', 'lot', 'in', 'the', 'book'],
     ['Python', 'is', 'amazing', 'language'],
     []]
    

    4.扩展缩写词 

    import contractions        
    from contractions import CONTRACTION_MAP
    def expand_contractions(sentence,contraction_mapping):
        contractions_pattern=re.compile('({})'.format('|'.join(contraction_mapping.keys())),flags=re.IGNORECASE|re.DOTALL)
        def expand_match(contraction):
            match=contraction.group(0)
            first_char=match[0]
            expanded_contraction=contraction_mapping.get(match)\
                if contraction_mapping.get(match)\
                    else contraction_mapping.get(match.lower())
            expanded_contraction=first_char+expanded_contraction[1:]
            return expanded_contraction
            expanded_sentence=contractions_pattern.sub(expand_match,sentence)
            return expanded_sentence
            
    expanded_corpus=[expand_contractions(sentence,CONTRACTION_MAP) for sentence in sentence_list]
    print(expanded_corpus)
    

    5.大小写转换

    print(corpus[0].lower())
    print(corpus[0].upper())
    
    >>>>>
    the brown fox wasn't that quick and couldn't win the race
    THE BROWN FOX WASN'T THAT QUICK AND COULDN'T WIN THE RACE

    6.删除停用词(删除没有或者极小意义的词)

    def remove_stopwords(tokens):
        stopword_list=nltk.corpus.stopwords.words('english')
        filtered_tokens=[token.lower() for token in tokens if token.lower() not in stopword_list]
        return filtered_tokens
    
    corpus_tokens=[tokenize_text(text) for text in corpus]#先用前文定义的tokenize_text函数分割文章
    filted_list_3=[[remove_stopwords(tokens) for tokens in sentence_tokens] for sentence_tokens in corpus_tokens]
    
    >>>>>>对比以下结果
    stopword_list#都是以小写字母展示
    Out[69]: 
    ['i',
     'me',
     'my',
     'myself',
     'we',
     'our',
     'ours',
     'ourselves',
     'you',
     "you're",
     "you've",
     "you'll",
    corpus_tokens
    Out[68]: 
    [[['The',
       'brown',
       'fox',
       'was',
       "n't",
       'that',
       'quick',
       'and',
       'could',
       "n't",
       'win',
       'the',
       'race']],
     [['Hey', 'that', "'s", 'a', 'great', 'deal', '!'],
      ['I', 'just', 'bought', 'a', 'phone', 'for', '$', '199']],
     [['@',
       '@',
       'You',
       "'ll",
       '(',
       'learn',
       ')',
       'a',
       '*',
       '*',
       'lot',
       '*',
       '*',
       'in',
       'the',
       'book',
       '.'],
      ['Python', 'is', 'amazing', 'language', '!'],
      ['@', '@']]]
    
    filted_list_3
    Out[67]: 
    [[['brown', 'fox', "n't", 'quick', 'could', "n't", 'win', 'race']],
     [['hey', "'s", 'great', 'deal', '!'], ['bought', 'phone', '$', '199']],
     [['@', '@', "'ll", '(', 'learn', ')', '*', '*', 'lot', '*', '*', 'book', '.'],
      ['python', 'amazing', 'language', '!'],
      ['@', '@']]]

    7.校正重复字符

    非正式的英文表达中常有重复字符的情况

    #校正重复字符
    import nltk
    import re
    from nltk.corpus import wordnet
    def remove_repleated_characters(tokens):
        repeat_pattern=re.compile(r'(\w*)(\w)\2(\w*)')#用该模式识别单词中两个不同 之间的重复字符
        match_substition=r'\1\2\3'#用置换方法消除一个重复字符
        def replace(old_word):
            if wordnet.synsets(old_word):
                return old_word#判断单词是否存在在语料库中,存在则保留
            new_word=repeat_pattern.sub(match_substition,old_word)
            return replace(new_word) if new_word!=old_word else new_word
        correct_tokens=[replace(word) for word in tokens]
        return correct_tokens
    
    sample_sentences="My school is reallllly amaaazningggg"
    sample_sentence=tokenize_text(sample_sentences)
    print(remove_repleated_characters(sample_sentence[0]))
    >>>>>>>>
    
    sample_sentence
    Out[24]: [['My', 'school', 'is', 'reallllly', 'amaaazningggg']]
    
    print(remove_repleated_characters(sample_sentence[0]))
    ['My', 'school', 'is', 'really', 'amazning']

    8.词干提取

    词干是单词的基本形式,可通过在词干上添加词缀来创建新词,词干不一定是标准正确的单词。nltk包中含几种实现算法:PorterStemmer ;LancasterStemmer;RegexpStemmer;SnowballStemmber,各算法实现方法不一致

    #词干提取PorterStemmer
    from nltk.stem import PorterStemmer 
    ps=PorterStemmer()
    print(ps.stem('jumping'),ps.stem('jumps'),ps.stem('jumped'),ps.stem('lying'),ps.stem('strange'))
    >>>>>>
    jump jump jump lie strang
    

    9.词形还原

    #词形还原,词元(lemma)始终在词典中
    from nltk.stem import WordNetLemmatizer
    wnl=WordNetLemmatizer()
    print(wnl.lemmatize('cars','n'))
    print(wnl.lemmatize('running','v'))
    >>>>>>
    car
    run

    以上就是处理,规范化,标准化文本的内容。

    更多相关内容
  • 基于python文本分析

    2018-07-02 18:54:26
    文本分析内容主要介绍基于神经网络下的情感分析,主要以介绍为主
  • Python文本分析

    2021-01-18 17:38:52
    Python文本分析
  • Python文本分析测试数据及案例代码
  • python文本分析与处理

    2018-01-25 13:10:12
    python文本分析与处理,比较轻量级的资源文件。 python文本分析与处理,比较轻量级的资源文件。
  • 应用python文本分析

    2018-05-23 10:57:19
    应用python进行基本的文本处理、分析。包括语料库的创建和模型的选择
  • Python读取小说文本,绘制词云图,主要人物出场次序,社交网络关系图,章回字数,有报告、详细说明和代码注释,有可执行文件.exe
  •   这里使用Python对电影《哪吒之魔童降世》的评论进行文本分析,这种分析方式还可用于垃圾邮件的过滤、新闻的分类等场景。   分析步骤:   1、对文本数据进行预处理,包括文本缺失值重复值处理、分词、去除...
  • python 文本分析

    千次阅读 2018-12-17 11:42:00
    自从认识了python这门语言,所有的事情好像变得容易了,作为小白,逗汁儿今天就为大家总结一下python文本处理的一些小方法。 话不多说,代码撸起来。 ——python大小写字符互换 在进行大小写互换时,常用到的...

    自从认识了python这门语言,所有的事情好像变得容易了,作为小白,逗汁儿今天就为大家总结一下python的文本处理的一些小方法。

    话不多说,代码撸起来。

    ——python大小写字符互换

    在进行大小写互换时,常用到的方法有4种,upper()、lower()、capitalize() 和title()。

    str = "www.dataCASTLE.com"
    print(str.upper())# 把所有字符中的小写字母转换成大写字母
    print(str.lower())# 把所有字符中的大写字母转换成小写字母
    print(str.capitalize())# 把第一个字母转化为大写字母,其余小写
    print(str.title())# 把每个单词的第一个字母转化为大写,其余小写 
    WWW.DATACASTLE.COM
    www.datacastle.com
    Www.datacastle.com
    Www.Datacastle.Com

    还可以同时进行大小写互换:

    s="hGdssWW678qqfdDDD777f8888sD8FJJss  jjYYhVV  #sh&" 
    def fn(x):
        if x.is lower():
            return x.upper()
        elif x.is upper():
            return x.lower()
        else:
            return x
    result=''.join([fn(r) for r in list(s)])
    print(result)
    HgDSSww678QQFDddd777F8888Sd8fjjSS  JJyyHvv  #SH&

    在s当中,不仅有大小写字母,还有数字,符号作为干扰,运用代码成功将大小写进行了互换。

     

    ——行列互换

     

    01 :insert进行A行与N行的互换

     

    https://mmbiz.qpic.cn/mmbiz_png/JJbONXXaqJwHhA7jyiboqQolJ95O3FxArrHgHicibiblicxicfIJACVEwoP5y1amfVS1Uu0z4hR6Ir4Ef1G65VupQaPw/640?wx_fmt=png

     

    with open('D:\\r\\1.txt','r') as f:
        txt=f.readlines()
        txt.insert(4,txt[1])#第二行插入第五行的位置
        del(txt[1])#删除原来的第二行
        print(txt)
    
    1   A   一 
    3   C   三 
    4   D   四 
    2   B   二 
    5   E   五 
    6   F   六

     

    02: 矩阵的行列互换

    matrix = [[1, 1, 1, 1],
                     [2, 2, 2, 2],
                     [3, 3, 3, 3],]
    
    trans = []
    for i in range(4):
        trans.append([row[i] for row in matrix])
    
    print('\n', trans)
     [[1, 2, 3], 
     [1, 2, 3], 
     [1, 2, 3], 
     [1, 2, 3]]

    关于行列互换的情况,python有一个很好用的库pandas,其中的操作非常简便,可以到之前的文章”十分钟上手pandas“中查看。

     

     

    ——实现快速排序

     

    快排的思想:首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。

     

    01:超级"简短"的python实现的快速排序,一行代码轻松实现快速排序。

    def quickSort(arg):
        if(arg==[]):
             return []
        return quickSort([i for i in arg[1:] if i<=arg[0]])+[arg[0]]+quickSort([i for i in arg[1:] if i>arg[0]])
    print quickSort([11,22,8,23,7,33,13,28,66,777])
    [7, 8, 11, 13, 22, 23, 28, 33, 66, 777]
    
    

     

    02:一般快排实现
     

    def quicksort(array, left, right):
        #建立递归终止条件
        if left >= right:
            return
        low = left#low为序列左边要移动的游标
        high = right#high为序列右边要移动的游标
        key = array[low]#将左边的数设为基准元素
    
        while left < right:
            # 当left与right未重合,并且比基准元素要大,就将游标向左移动
            while left < right and array[right] > key:
                right -= 1
            # 如果比基准元素小,就跳出循环,并且把其放在基准元素左边
            array[left] = array[right]
    
            # 当low与last未重合,并且比基准元素要小,就将游标向右移动
            while left < right and array[left] <= key:
                left += 1
            # 如果比基准元素大,就跳出循环,并且把其放在基准元素右边
            array[right] = array[left]
    
        # 当low与last相等,就是基准元素的排序位置
        array[right] = key
    
        # 对排序好的元素左右两边的序列进行递归
        quicksort(array, low, left - 1)
        quicksort(array, left + 1, high)
    
    array = [11,22,8,23,7,33,13,28,66,777]
    print("Quick Sort: ")
    quicksort(array,0,len(array)-1)
    print(array)
    [7, 8, 11, 13, 22, 23, 28, 33, 66, 777]
    
    

     

    03:《算法导论》中的快排程序

     

    def quicksort(array, l, r):
    
        if l < r:
            q = partition(array, l, r)
            quick_sort(array, l, q - 1)
            quick_sort(array, q + 1, r)
    
    def partition(array, l, r):
        x = array[r]
        i = l - 1
    
    
        for j in range(l, r):
            if array[j] <= x:
                i += 1
                array[i], array[j] = array[j], array[i]
        array[i + 1], array[r] = array[r], array[i+1]
        return i + 1
    
    array = [11,22,8,23,7,33,13,28,66,777]
    print("Quick Sort: ")
    quicksort(array,0,len(array)-1)
    print(array)
    [7, 8, 11, 13, 22, 23, 28, 33, 66, 777]

     

    04:python对list有一个内置函数sorted()排序

     

    a = [11,22,8,23,7,33,13,28,66,777]
    b=sorted(a)
    print(b)
    print(a)
    
    [7, 8, 11, 13, 22, 23, 28, 33, 66, 777]
    [11, 22, 8, 23, 7, 33, 13, 28, 66, 777]

     

    sorted虽然是使用函数方法进行排序,但是效果非常好。使用sorted函数进行排序,不会改变a原有的排序,并且当文本中有其余字母符号等干扰时,也可以成功的将数字进行排序。

     

     

    ——文本对齐

     

    有些时候我们得到的文本可能是混乱的,需要进行对齐处理,关于对齐有以下几种方法:

    https://mmbiz.qpic.cn/mmbiz_png/JJbONXXaqJwHhA7jyiboqQolJ95O3FxAr1ic3wm76KHbTWrZIFia9tGPJTjkUnLNqTGQH3IOXWL0uA6LyJW0JcMAA/640?wx_fmt=png

     

    01:format格式化对齐
     

    # format格式化对齐
    def f1():    
        with open("D:\\r\\2.txt","r") as f:
            for s in f:
                l=s.rsplit ()
                #左对齐,填充符号自定
                t='{0:<5} {1:<7} {2}'.format(l[0],l[1],l[2])    
                print(str(t))
    f1()
    
    111     ABC        西瓜
    22222   AABBC      水蜜桃
    3333    CSDDGFF    香蕉
    44      QQQSED     波罗蜜
    
    

     

    02:just对齐

     

    #just对齐
    r=''
    def f2():
        f=open("D:\\r\\2.txt","r")
        for s in f:
            l=s.rsplit() #通过指定分隔符对字符串进行切片
            print(l[0].ljust(5," "),l[1].ljust(7," "),l[2])
    f2()
    
    
    111     ABC        西瓜
    22222   AABBC      水蜜桃
    3333    CSDDGFF    香蕉
    44      QQQSED     波罗蜜

     

    ——分行输出

    01:正则表达式分行输出

     

    #正则表达式
    a="aA1一bB2二cC3三dD4四eE5五fF6六gG7七hH8八iI9九"
    import re
    reg=["[a-z]","[A-Z]","\d","[^\da-zA-Z]"]
    #compile和findall一起使用,返回一个列表
    for s in reg:    
        rega=re.compile(s)
        s=re.findall(rega,a)
        print("".join(s))
    
    abcdefghi
    ABCDEFGHI
    123456789
    一二三四五六七八九

     

    02:string方法分行输出

     

    #string方法
    a="aA1一bB2二cC3三dD4四eE5五fF6六gG7七hH8八iI9九"
    import string
    ta=tb=tc=td=''
    la=string.ascii_lowercase#la为小写字母
    ua=string.ascii_uppercase#ua为大写字母
    nb=string.digits#nb为0~9的数字
    ub="一二三四五六七八九"
    
    #分别从a中找出小写、大写字母、数字并进行分行输出
    for s in a:
        if s in la:
            ta=ta+s
        if s in ua:
            tb=tb+s
        if s in nb:
            tc=tc+s
        if s in ub:
            td=td+s
    print(ta)
    print(tb)
    print(tc)
    print(td)
    
    abcdefghi
    ABCDEFGHI
    123456789
    一二三四五六七八九

     

    好了,今天的分享就到这里。

    关注微信公众号:DC学习助手,探索数据科学之旅

    展开全文
  • 项目介绍,给一段英文文本(英文影评评论)来预测情感是正向还是负向 模型使用的是LSTM+RNN。 代码包括数据处理,模型训练,对新数据做出预测,并将预测结果(正向情感)保存到result.txt中 软件:anaconda3 一.数据...
  • cntext:一款 Python文本分析

    千次阅读 2022-04-16 15:21:55
    cntext中文文本分析库,可对文本进行词频统计、词典扩充、情绪分析、相似度、可读性等 功能模块含 [x] stats 文本统计指标 [x] 词频统计 [x] 可读性 [x] 内置pkl词典 [x] 情感分析 [x] dictionary 构建...

    cntext中文文本分析库,可对文本进行词频统计、词典扩充、情绪分析、相似度、可读性等

    功能模块含

    • [x] stats 文本统计指标

    • [x] 词频统计

    • [x] 可读性

    • [x] 内置pkl词典

    • [x] 情感分析

    • [x] dictionary 构建词表(典)

    • [x] Sopmi 互信息扩充词典法

    • [x] W2Vmodels 词向量扩充词典法

    • [x] similarity 文本相似度

    • [x] cos相似度

    • [x] jaccard相似度

    • [x] 编辑距离相似度

    • [ ] bias 待开发

    喜欢记得收藏、关注、点赞。

    ⚠️ 【注】资料、代码、交流,文末获取

    安装

    pip install cntext==1.6
    

    QuickStart

    import cntext as ct
    
    help(ct)
    

    Run

    Help on package cntext:
    
    NAME
        cntext
    
    PACKAGE CONTENTS
        bias
        dictionary
        similarity
        stats
    

    一、stats

    目前stats内置的函数有

    • readability 文本可读性

    • term_freq 词频统计函数

    • dict_pkl_list 获取cntext内置词典列表(pkl格式)

    • load_pkl_dict 导入pkl词典文件

    • diction 情感分析

    import cntext as ct
    
    text = '如何看待一网文作者被黑客大佬盗号改文,因万分惭愧而停更。'
    
    ct.term_freq(text)
    

    Run

    Counter({'看待': 1,
             '网文': 1,
             '作者': 1,
             '黑客': 1,
             '大佬': 1,
             '盗号': 1,
             '改文因': 1,
             '万分': 1,
             '惭愧': 1,
             '停': 1})
    

    1.1 readability

    文本可读性,指标越大,文章复杂度越高,可读性越差。

    readability(text, language=‘chinese’)

    • text: 文本字符串数据

    • language: 语言类型,“chinese"或"english”,默认"chinese"

    中文可读性 算法参考自

    徐巍,姚振晔,陈冬华.中文年报可读性:衡量与检验[J].会计研究,2021(03):28-44.

    • readability1 —每个分句中的平均字数

    • readability2 —每个句子中副词和连词所占的比例

    • readability3 —参考Fog Index, readability3=(readability1+readability2)×0.5

    以上三个指标越大,都说明文本的复杂程度越高,可读性越差。

    import cntext as ct
    
    text = '如何看待一网文作者被黑客大佬盗号改文,因万分惭愧而停更。'
    
    ct.readability(text, language='chinese')
    

    Run

    {'readability1': 13.5,
     'readability2': 0.08333333333333333,
     'readability3': 6.791666666666667}
    

    1.2 term_freq

    词频统计函数,返回Counter类型

    import cntext as ct 
    
    text = '如何看待一网文作者被黑客大佬盗号改文,因万分惭愧而停更。'
    
    ct.term_freq(text)
    

    Run

    Counter({'看待': 1,
             '网文': 1,
             '作者': 1,
             '黑客': 1,
             '大佬': 1,
             '盗号': 1,
             '改文因': 1,
             '万分': 1,
             '惭愧': 1,
             '停': 1})
    

    1.3 dict_pkl_list

    获取cntext内置词典列表(pkl格式)

    import cntext as ct
    
    # 获取cntext内置词典列表(pkl格式)
    ct.dict_pkl_list()
    

    Run

    ['DUTIR.pkl',
     'HOWNET.pkl',
     'sentiws.pkl',
     'ChineseFinancialFormalUnformalSentiment.pkl',
     'ANEW.pkl',
     'LSD2015.pkl',
     'NRC.pkl',
     'geninqposneg.pkl',
     'HuLiu.pkl',
     'AFINN.pkl',
     'ADV_CONJ.pkl',
     'LoughranMcDonald.pkl',
     'STOPWORDS.pkl']
    

    词典对应关系, 部分情感词典资料整理自 quanteda.sentiment

    pkl文件词典语言功能
    DUTIR.pkl大连理工大学情感本体库中文七大类情绪,哀, 好, 惊, 惧, 乐, 怒, 恶
    HOWNET.pkl知网Hownet词典中文正面词、负面词
    sentiws.pklSentimentWortschatz (SentiWS)英文正面词、负面词;
    效价
    ChineseFinancialFormalUnformalSentiment.pkl金融领域正式、非正式;积极消极中文formal-pos、

    formal-neg;
    unformal-pos、
    unformal-neg |
    | ANEW.pkl | 英语单词的情感规范Affective Norms for English Words (ANEW) | 英文 | 词语效价信息 |
    | LSD2015.pkl | Lexicoder Sentiment Dictionary (2015) | 英文 | 正面词、负面词 |
    | NRC.pkl | NRC Word-Emotion Association Lexicon | 英文 | 细粒度情绪词; |
    | geninqposneg.pkl |
    |
    |
    |
    | HuLiu.pkl | Hu&Liu (2004)正、负情感词典 | 英文 | 正面词、负面词 |
    | AFINN.pkl | 尼尔森 (2011) 的“新 ANEW”效价词表 | 英文 | 情感效价信息valence |
    | LoughranMcDonald.pkl | 会计金融LM词典 | 英文 | 金融领域正、负面情感词 |
    | ADV_CONJ.pkl | 副词连词 | 中文 |
    |
    | STOPWORDS.pkl |
    | 中、英 | 停用词 |

    注意:

    • 如果用户情绪分析时使用DUTIR词典发表论文,请在论文中添加诸如“使用了大连理工大学信息检索研究室的情感词汇本体” 字样加以声明。参考文献中加入引文“徐琳宏,林鸿飞,潘宇,等.情感词汇本体的构造[J]. 情报学报, 2008, 27(2): 180-185.”

    • 如果大家有制作的词典,可以上传至百度网盘,并在issue中留下词典的网盘链接。如词典需要使用声明,可连同文献出处一起issue

    1.4 load_pkl_dict

    导入pkl词典文件,返回字典样式数据。

    import cntext as ct
    
    # 导入pkl词典文件,
    print(ct.load_pkl_dict('DUTIR.pkl'))
    

    Run

    {'DUTIR': {'哀': ['怀想', '治丝而棼', ...],
               '好': ['进贤黜奸', '清醇', '放达', ...], 
               '惊': ['惊奇不已', '魂惊魄惕', '海外奇谈',...],
               '惧': ['忸忸怩怩', '谈虎色变', '手忙脚乱', '刿目怵心',...],
               '乐': ['百龄眉寿', '娱心', '如意', '喜糖',...],
               '怒': ['饮恨吞声', '扬眉瞬目',...],
               '恶': ['出逃', '鱼肉百姓', '移天易日',]
               }
    

    1.5 sentiment

    sentiment(text, diction, language=‘chinese’) 使用diy词典进行情感分析,计算各个情绪词出现次数; 未考虑强度副词、否定词对情感的复杂影响,

    • text: 待分析中文文本

    • diction: 情感词字典;

    • language: 语言类型,“chinese"或"english”,默认"chinese"

    import cntext as ct
    
    text = '我今天得奖了,很高兴,我要将快乐分享大家。'
    
    ct.sentiment(text=text,
                 diction=ct.load_pkl_dict('DUTIR.pkl')['DUTIR'])
    

    Run

    {'哀_num': 0,
     '好_num': 0,
     '惊_num': 0,
     '惧_num': 0,
     '乐_num': 3,
     '怒_num': 0,
     '恶_num': 0,
     'stopword_num': 7,
     'sentence_num': 1,
     'word_num': 13}
    

    如果不适用pkl词典,可以自定义自己的词典,例如

    import cntext as ct
    
    diction = {'pos': ['高兴', '快乐', '分享'],
                  'neg': ['难过', '悲伤'],
                  'adv': ['很', '特别']}
    
    text = '我今天得奖了,很高兴,我要将快乐分享大家。'
    ct.sentiment(text, diction)
    

    Run

    {'pos_num': 7,
     'neg_num': 0,
     'adv_num': 1,
     'stopword_num': 7,
     'sentence_num': 1,
     'word_num': 13}
    

    二、dictionary

    本模块用于构建词表(典),含

    • SoPmi 共现法扩充词表(典)

    • W2VModels 词向量word2vec扩充词表(典)

    2.1 SoPmi 共现法

    import cntext as ct
    import os
    
    sopmier = ct.SoPmi(cwd=os.getcwd(),
                       input_txt_file='data/sopmi_corpus.txt',  #原始数据,您的语料
                       seedword_txt_file='data/sopmi_seed_words.txt', #人工标注的初始种子词
                       )   
    
    sopmier.sopmi()
    

    Run

    Step 1/4:...预处理   语料 ...
    Loading model cost 0.543 seconds.
    Prefix dict has been built successfully.
    Step 2/4:...收集 共现词线索 ...
    Step 3/4:...计算    互信息 ...
    Step 4/4:...保存    候选词 ...
    完成! 耗时 49.50996398925781 s
    

    2.2 W2VModels 词向量

    特别要注意代码需要设定lang语言参数

    import cntext as ct
    import os
    
    #初始化模型,需要设置lang参数。
    model = ct.W2VModels(cwd=os.getcwd(), 
                         lang='english')  #语料数据 w2v_corpus.txt
    model.train(input_txt_file='data/w2v_corpus.txt')
    
    
    #根据种子词,筛选出没类词最相近的前100个词
    model.find(seedword_txt_file='data/w2v_seeds/integrity.txt', 
               topn=100)
    model.find(seedword_txt_file='data/w2v_seeds/innovation.txt', 
               topn=100)
    model.find(seedword_txt_file='data/w2v_seeds/quality.txt', 
               topn=100)
    model.find(seedword_txt_file='data/w2v_seeds/respect.txt', 
               topn=100)
    model.find(seedword_txt_file='data/w2v_seeds/teamwork.txt', 
               topn=100)
    

    Run

    Step 1/4:...预处理    语料 ...
    Step 2/4:...训练   word2vec模型 ...
    Step 3/4:...准备 每个seed在word2vec模型中的相似候选词...
    Step 4/4 完成! 耗时 60 s
    
    
    
    Step 3/4:...准备 每个seed在word2vec模型中的相似候选词...
    Step 4/4 完成! 耗时 60 s
    
    
    
    Step 3/4:...准备 每个seed在word2vec模型中的相似候选词...
    Step 4/4 完成! 耗时 60 s
    
    
    
    Step 3/4:...准备 每个seed在word2vec模型中的相似候选词...
    Step 4/4 完成! 耗时 60 s
    
    
    
    Step 3/4:...准备 每个seed在word2vec模型中的相似候选词...
    Step 4/4 完成! 耗时 60 s
    

    需要注意

    训练出的w2v模型可以后续中使用。

    from gensim.models import KeyedVectors
    
    w2v_model = KeyedVectors.load(w2v.model路径)
    #找出word的词向量
    #w2v_model.get_vector(word)
    #更多w2_model方法查看
    #help(w2_model)
    

    2.3 co_occurrence_matrix

    词共现矩阵

    import cntext as ct
    
    documents = ["I go to school every day by bus .",
             "i go to theatre every night by bus"]
    
    ct.co_occurrence_matrix(documents, 
                            window_size=2, 
                            lang='english')
    

    图片

    documents2 = ["编程很好玩",
                 "Python是最好学的编程"]
    
    ct.co_occurrence_matrix(documents2, 
                            window_size=2, 
                            lang='chinese')
    

    图片

    三、similarity

    四种相似度计算函数

    • cosine_sim(text1, text2) cos余弦相似

    • jaccard_sim(text1, text2) jaccard相似

    • minedit_sim(text1, text2) 最小编辑距离相似度;

    • simple_sim(text1, text2) 更改变动算法

    算法实现参考自 Cohen, Lauren, Christopher Malloy, and Quoc Nguyen. Lazy prices. No. w25084. National Bureau of Economic Research, 2018.

    import cntext as ct
    
    
    text1 = '编程真好玩编程真好玩'
    text2 = '游戏真好玩编程真好玩'
    
    print(ct.cosine_sim(text1, text2))
    print(ct.jaccard_sim(text1, text2))
    print(ct.minedit_sim(text1, text2))
    print(ct.simple_sim(text1, text2))
    

    Run

    0.9999999999999998
    1.0
    1
    0.84375
    

    推荐文章

    技术交流

    欢迎转载、收藏、有所收获点赞支持一下!

    在这里插入图片描述

    目前开通了技术交流群,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友

    • 方式①、发送如下图片至微信,长按识别,后台回复:加群;
    • 方式②、添加微信号:dkl88191,备注:来自CSDN
    • 方式③、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

    长按关注

    展开全文
  • Python文本分析 jieba

    千次阅读 2021-05-07 17:00:29
    Python文本分析 jieba.analyse.extract_tags()提取句子级的关键字 提取关键字 分词介绍 统计中文词频 jieba.analyse.extract_tags()提取句子级的关键字 提取关键字 jieba.analyse.extract_tags()提取句子级的关键字 ...

    Python文本分析

    1. jieba.analyse.extract_tags()提取句子级的关键字
    2. 提取关键字
    3. 分词介绍
    4. 统计中文词频

    jieba.analyse.extract_tags()提取句子级的关键字
    在这里插入图片描述

    提取关键字
    jieba.analyse.extract_tags()提取句子级的关键字

    1. 安装jieba
    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple jieba
    
    1. jieba.analyse.extract_tags():
    jieba.analyse.extract_tags(
        sentence,
        topK=20,
        withWeight=False,
        allowPOS=(),
        withFlag=False,
    )
    
    参数解释
    sentence需要提取的字符串,必须是str类型,不能是list
    topK提取前多少个关键字
    withWeight是否返回每个关键词的权重
    allowPOS是允许的提取的词性,默认为allowPOS=‘ns’, ‘n’, ‘vn’, ‘v’,提取地名、名词、动名词、动词

    举例

    import jieba
    import jieba.analyse
    
    sentence = "本科及以上学历,计算机、数学等相关专业重点学校在校生(硕士为佳)-- 至少掌握一门编程语言,\
    包括SQL。熟悉Linux;"
    
    keywords = jieba.analyse.extract_tags(sentence, topK=20, withWeight=True, allowPOS=('n', 'nr', 'ns'))
    
    for item in keywords:
        print(item[0], item[1])
    
    编程语言 1.426971375275
    在校生 1.3403279777
    硕士 1.1087799663225
    计算机 0.85059805386
    数学 0.826042559475
    专业 0.7741456821725
    学校 0.71152323753
    重点 0.6565789565175
    
    import jieba
    import jieba.analyse
    sentence = "本科及以上学历,计算机、数学等相关专业重点学校在校生(硕士为佳)-- 至少掌握一门编程语言,包括SQL。熟悉Linux;"
    key = ["  ".join(jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=('n', 'nr', 'ns')))]
    print(key)
    
    ['编程语言  在校生  硕士  计算机  数学  专业  学校  重点']
    

    分词介绍
    在这里插入图片描述
    举例

    import jieba
    #你要运行的文件
    import paddle
    paddle.enable_static()
    jieba.enable_paddle()
    strs=["我来到北京清华大学","乒乓球拍卖完了","中国科学技术大学"]
    for str in strs:
        seg_list = jieba.cut(str,use_paddle=True) # 使用paddle模式
        print("Paddle Mode: " + '/'.join(list(seg_list)))
    
    seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
    print("Full Mode: " + "/ ".join(seg_list))  # 全模式
    
    seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
    print("Default Mode: " + "/ ".join(seg_list))  # 精确模式
    
    seg_list = jieba.cut("他来到了网易杭研大厦")  # 默认是精确模式
    print(", ".join(seg_list))
    
    seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造")  # 搜索引擎模式
    print(", ".join(seg_list))
    

    在这里插入图片描述

    统计中文词频

    文本来源于计算机二级Python

    # -*- coding: utf-8 -*-
    import jieba
    txt = open("三国演义.txt", "r", encoding='utf-8').read()
    #def get_text():
    #    txt = open("1.txt", "r", encoding='UTF-8').read()
    #    txt = txt.lower()
    #    for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':
    #        txt = txt.replace(ch, " ")      # 将文本中特殊字符替换为空格
    #    return txt
     
    counts = {}   
    for word in words:
        if len(word) == 1:    # 单个词语不计算在内
            continue
        else:
            counts[word] = counts.get(word, 0) + 1    
    items = list(counts.items())
    items.sort(key=lambda x: x[1], reverse=True)    
    for i in range(3):
        word, count = items[i]
        print("{0:<5}{1:>5}".format(word, count))
    

    当然也可以用计数器collections.Counter,更为简单

    在这里插入图片描述

    到这里就结束了,如果对你有帮助,欢迎点赞关注评论,你的点赞对我很重要,author:北山啦

    展开全文
  • 目录一、文本处理1、精确模式(默认)2、全模式3、搜索引擎模式二、词云图1、wordcloud模块导入2、词云图实现三、实例——利用股评进行情绪分析1、数据来源及snownlp模块导入2、代码实现3、结果分析 一、文本处理 ...
  • Dream_of_the_Red_Kmeans.py :基于python实现红楼梦聚类分析的主程序 Dream_of_the_Red_Mansion.txt : 红楼梦txt KMeansCluster_Class.py :自己编写的KMeans程序 Red_Mansion_Dictionary.txt : 红楼梦人物名,...
  • python 文本聚类分析案例说明摘要1、结巴分词2、去除停用词3、生成tfidf矩阵4、K-means聚类5、获取主题词 / 主题词团 说明 实验要求:对若干条文本进行聚类分析,最终得到几个主题词团。 实验思路:将数据进行预处理...
  • CNN算法分类 1、 特征提取流程: 详细见代码cnews_loader.py。 其中定义了以下函数,即为其整体流程。主要目的就是把文本转为词向量,建立id对应,因为只有数字才能计算。
  • 主要为大家详细介绍了Python文本特征抽取与向量化算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • python实现基于词典的文本情感分析,包含测试数据和实现代码
  • python文本挖掘

    2018-11-22 10:24:03
    相似度分析文本情感分析文本过滤、词云、皮尔逊原理
  • Python文本数据分析:新闻分类任务 【软件包】 jieba pandas wordcloud matplotlib sklearn 【概念】 IDF:逆文档频率逆文档频率TF-IDF=词(TF)X逆文档频率(IDF)词频(TF)=某词该在文章中出现次数/文出现次数最多的...
  • python文本相似度分析

    2019-01-26 19:29:01
    python爬虫,以及相似度分析,可以分析两个文本字符串的相似度
  • 今天小编就为大家分享一篇使用python进行文本预处理和提取特征的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • Python 文本处理教程

    2018-05-10 10:19:44
    Python2.7版本的文本处理电子书,全面介绍如何快速处理字符串,正则表达式等
  • python·文本分析

    千次阅读 2021-07-11 22:24:45
    python·文本分析词云图停用词处理分词 词云图 import matplotlib.pyplot as plt #数学绘图库 import jieba #jieba分词库 from wordcloud import WordCloud,ImageColorGenerator #词云库 from PIL import Image #...
  • Python文本进度条的实现和简单注释解析 需求分析: 采用字符串打印的方式,打印输出可以动态变化的文本进度条,要求进度条需要能在一行中逐渐变化。 问题分析: 如何获得文本进度条的变化时间?→采用sleep()模拟...
  • python 文本分析This is a book review of Text Analytics with Python: A Practical Real-World Approach to Gaining Actionable Insights from your Data by Dipanjan Sarkar 这是有关使用Python进行文本分析的...
  • 在做jieba中文分词处理,进行文本分析,必不可少的停用词处理,国内比较常用的中文停用词库,有以下几个: 中文停用词表 哈工大停用词表 百度停用词表 四川大学机器智能实验室停用词库 而@elephantnose 对以上4个...
  • 主要介绍了基于Python词云分析政府工作报告关键词,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 1. Python 文本分析工具 NLTK NLTK (Natural Language Toolkit) NLP 领域最常用的一个 Python 库 , NLP(natural language process), 开源项目 , 自带分词,分类功能,强大的社区支持。 1.1 NLTK 安装 pip ...
  • 本文实例讲述了Python实现简单的文本相似度分析操作。分享给大家供大家参考,具体如下: 学习目标: 1.利用gensim包分析文档相似度 2.使用jieba进行中文分词 3.了解TF-IDF模型 环境: Python 3.6.0 |Anaconda 4.3.1 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 158,524
精华内容 63,409
关键字:

python文本分析

友情链接: 多线程例子.rar