读书笔记2

本文介绍了如何使用Python进行文本分类,包括基础的字符串操作、numpy和pandas库的运用,如数据合并、One-hot编码和删除数据。重点讲解了数据预处理中的分词和关键词提取,特别是采用TF-IDF算法来计算关键词的重要程度。最后提及了模型的搭建和训练过程。
摘要由CSDN通过智能技术生成

问题背景:

对新闻文本进行分类,假设有9个类别:财经、房产、教育、科技、军事、汽车、体育、游戏、娱乐。

基础知识

2.1 字符串操作

  • strip() :用于去除字符串两侧的空白字符(包括空格、换行、制表符等,默认是空格)。
  • split(): 用于将字符串按照分隔符分割成多个子串,默认的分隔符是空格。

2.2numpy

    numpySciPyPandas等数据处理或科学计算库的基础。

    例如:计算a^2+b^2,其中,b和b是一维数组

    import numpy as np

    a=np.array([0,1,2,3,4])

    b=np.array([9,8,7,6,5])

    c=a**2+b**2

     print(c)

     结果:

    

2.3 pandas

      pandas是Python第三方库,提供高性能易用数据类型和分析工具。

常见操作:

  • 读取文件

  • [ ] 选择数据,可以直接传入column;也可以传入column list;传入列表,并以列表顺序读取,返回DataFrame对象。DataFrame是一个表格型的数据类型,每列值类型可以不同,DataFrame既有行索引、也有列索引。 例如:

        df['C']:返回C列

        df[['C','D']]:返回C、D列

  • pandas.concat()数据合并

       pd.concat(objs, axis=0, join='outer', ignore_index=False)

       objs:要连接的DataFrameSeries对象序列,可以是一个列表或字典。

       axis:连接的轴,默认为0,表示按行连接。

       join:连接方式,默认为’outer’,表示使用并集的方式进行连接。

       ignore_index:是否忽略连接后结果中的索引,默认为False

       例如:

       import pandas as pd

       df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})

       df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})

       # 使 用concat函数进行行连接

       df_concat_rows = pd.concat([df1, df2])

       print(df_concat_rows)

       结果:

       

      # 使用concat函数进行列连接

      df_concat_cols = pd.concat([df1, df2], axis=1)

      print(df_concat_cols)

      结果:

      

  • get_dummies()进行One-hot编码,将分类变量转换为虚拟变量。

       import pandas as pd

       data = {'颜色': ['红色', '绿色', '蓝色', '红色']}

       df = pd.DataFrame(data)

       encoded_df = pd.get_dummies(df['颜色'])

       print(encoded_df)

  • drop()函数:删除数据集中多余的数据

        DataFrame.drop(labels=None, axis=0, index=None, columns=None, level=None,                           inplace=False, errors='raise') 

        常用参数:

         label s:待删除的行名or列名;

         axis:删除时所参考的轴,0为行,1为列; 

         index:待删除的行名

         columns:待删除的列名

         level:多级列表时使用,暂时不作说明 

         inplace:布尔值,默认为False,这是返回的是一个copy;若为True,  返回的是删除数据后

         的结果。 

          例如:

          #构造一个数据集

          import pandas as pd

          import numpy as np

          df1=pd.DataFrame(np.arange(25).reshape(5,5),columns=list('ABCDE'))

           

  • 删除行数据

       #下面两种删除方式是等价的,传入labels和axis 与只传入一个index 作用相同,删除第0行

       df2=df1.drop(labels=0,axis=0)

       df22=df1.drop(index=0)

       

  • 删除多行数据

       df3=df1.drop(labels=[0,1,2],axis=0)

       df33=df1.drop(index=[0,1,2])

       

  • 删除列数据

       df4=df1.drop(labels=['A','B','C'],axis=1)

       df44=df1.drop(columns=['A','B','C'])

        

  • inplace参数的使用'

       dfs=df1

       #inplace=None时返回删除前的数据

       dfs.drop(labels=['A','B','C'],axis=1)

       

       #inplace=True时返回删除后的数据

       dfs.drop(labels=['A','B','C'],axis=1,inplace=True)

       

  • .Shape

       Pandas Shape是Pandas库中的一个重要属性,它用来表示一个数据集(DataFrame或                   Series)的形状,也就是行数和列数。它可以用来进行数据的统计分析和筛选。 shape属性的        返回值是一个元组,其中第一个元素表示行数,第二个元素表示列数,例如(5, 5)。在二维        矩阵中,df.shape[0]返回的是df的行数,df.shape[1]返回的是df的列数。如果出现shape[-1]        示的即为最后一维。

        例如:

        import pandas as pd

        import numpy as np

        df1=pd.DataFrame(np.arange(25).reshape(5,5),columns=list('ABCDE'))

        print(df1.shape)   # 查看数据集的行数和列数

        结果:

        

        print(df.size)      # 查看数据集的元素个数

        结果:

        

2.4 re

      Python  re 模块提供了re.sub用于替换字符串中的匹配项。

  • re.sub():函数共有5个参数:

        pattern:表示正则中的模式字符串;

        repl:表示要替换的字符串(即匹配到pattern后替换为repl),也可以是个函数;

        string:表示要被处理(查找替换)的原始字符串;

        count:可选参数,表示要替换的最大次数,而且必须是非负整数,该参数默认为0,即所有                        的匹配都会替换;

         flags:可选参数,表示编译时用的匹配模式(如忽略大小写、多行模式等),数字形式,默                      认为0。         

         例如:

         import re

         s="12abc34"

         s1=re.sub(r'[0-9]', '*', s)  #这句话表示只匹配单一数字,并将每一个数字替换为一个星号

         print(s1)

         结果:

         

数据预处理

3.1分词

  • 目的:方便将中文文本转化为词向量存储、处理。
  • 编程思路:

     1)读取数据

           import numpy as np        #引用库numpy

           import re                 #引用库re

           import pandas as pd        #引用库pandas

           trainset_path = './data/trainset.xlsx'     

           df_caijing = pd.read_excel(trainset_path,sheet_name='财经')   

           df_fangchan = pd.read_excel(trainset_path,sheet_name='房产')

           ....

        2)编写函数punct_handling()处理标点、数字、特殊符号。

           def punct_handling(inputstr):

                  remove_str = \"[\\s+\\.:\\!-\\/_,$%\\[\\]^\\)*(+\\\"\\']+|[+——! 1234567890·,   。??

                  ~@#¥ %……&*()` | \\\" ~〜 【】 ※]“1234567890”+“ 

                  punc = \"!?"#$%&'()*+,-/:;<=>@[\]^_`{|}~⦅⦆                              「」、、 〃》「」『』【】〔〕〖〗〘〙〚〛〜〝〞"

                   punc = punc.encode('utf-8').decode(\"utf-8\") 

                   string1 = re.sub(remove_str,””,inputstr)

                   string1 = re.sub(punc,””,string1)

                   return string1

                    

       3)编写函数seg_depart()对excel文档每一行,调用函数punct_handling()处理标点、数                字、特殊符号后,利用jieba库进行中文分词,利用for循环去掉停用词。

             # 对句子进行中文分词

            def seg_depart(sentence):        

                 sentence = punct_handling(sentence)

                 sentence_depart = jieba.cut(sentence.strip())

                 outstr = ''",

                 # 去停用词,词之间空格分开

                 for word in sentence_depart:

                     if word not in stopwords:

                          if word != '\\t':

                             outstr += word

                             outstr +=” ”  

            return outstr

        4)调用函数实现分词    

3.2关键词提取

  • 采用TF-IDF算法

       tfidf(x)=tf(x)*tf_corpus(x,types)*idf(x)idf(x)=log(total_num/(num(x)+1))

       x表示词语,tfidf(x)为该词的关键指数, tf(x)表示该词在当前新闻中的词频。tf_corpus(x)

       代表该词在类别为types的语料库中出现的次数,idf(x)为逆文档率。total_num表示所

       有语料库中总的新闻数,num(x)表示包含该词x的新闻数。

  • 编程思路
  1.  加载预处理后的语料库
  2.  遍历语料库,获取每一条新闻、每一个语料库的词典的列表以及获取全语料库的词数。  

          定义的函数有:

          def count_words_in_sentence(string):             #计算词频    

          def get_corpus_dict(sentences_num):             #计算每一个语料库词典的列表       

          def get_total_words_num(corpus_dict_list):     #计算全语料库中词数        

      3.  遍历每一条新闻,计算每个词的关键指数。

           主要函数有:

           def tf1(word,string):    #计算某词出现在当前新闻的次数 全新闻词数

           def tf2(word,type_id,corpus_dict_list,words_num):   

           #计算某词出现在该语料库中的次数 / 全语料库词数 

           def idf(word, dict_list):   #计算 log(新闻总数 包含该词的新闻数+1)

           def tfidf(word, string, dict_list,type_id,corpus_dict_list,words_num): 

           #计算词的关键指数       

       4.   保存关键指数最高的maxlen个词,存储为新的新闻。

              def get_keyword_sentence(index):        # 保存关键指数最高的

下一步。

3.3 搭建和训练模型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值