【python】TXT文本数据清洗和英文分词、词性标注

去除空行

def clean_line(raw_file_name, save_file_name):
    with open(raw_file_name, 'r+') as f_r, open(save_file_name, 'w+') as f_w:
        f_r_list = list(set(f_r.readlines()))
        for sentence in f_r_list:
            if sentence == "\n":
                f_r_list.remove(sentence)
        f_w.writelines(f_r_list)
  1. 将文本的每一行读取为一个列表,然后用set集合去重再转化为列表
  2. for循环判断列表是否有"\n"字符,如果有则去除该字符
  3. 将列表中的内容写入目标文件

去除多余字符

sentence = filter(lambda ch:ch not in '//\t\n0123456789',sentence)

英文词性标注

因为英文以空格作为分隔符,故可直接进行词性标注和实体识别,无需分词过程。

词性表示方式

CC  并列连词          NNS 名词复数        UH 感叹词
CD  基数词              NNP 专有名词        VB 动词原型
DT  限定符            NNP 专有名词复数    VBD 动词过去式
EX  存在词            PDT 前置限定词      VBG 动名词或现在分词
FW  外来词            POS 所有格结尾      VBN 动词过去分词
IN  介词或从属连词     PRP 人称代词        VBP 非第三人称单数的现在时
JJ  形容词            PRP$ 所有格代词     VBZ 第三人称单数的现在时
JJR 比较级的形容词     RB  副词            WDT 以wh开头的限定词
JJS 最高级的形容词     RBR 副词比较级      WP 以wh开头的代词
LS  列表项标记         RBS 副词最高级      WP$ 以wh开头的所有格代词
MD  情态动词           RP  小品词          WRB 以wh开头的副词
NN  名词单数           SYM 符号            TO  to

分词和标注

# 英文文章分词
def seg(raw_file):
    ps = PorterStemmer()
    with open(raw_file, 'r') as f_r, open(seg_file,'w') as f_w:
        sentences = f_r.read()
        words = word_tokenize(sentences)
        for w in words:
            f_w.write(ps.stem(w)+'\n')
    print('Segmentation Finished!')

输入为含有分隔符的英语文章,输出为一个单词一行的格式。

# 英文词性标注
def pos(seg_file):
  with open(seg_file, 'r') as f_r, open(pos_file, 'w', encoding='utf-8') as f_w:
      sentences = f_r.read()
      sentences = nltk.sent_tokenize(sentences)
      for words in sentences:
          words= nltk.pos_tag(nltk.word_tokenize(words))
          for i, j in enumerate(words):
              f_w.write(words[i][0]+' '+words[i][1]+'\n')
  print('PosTagging Finished!')

输入为已经分割好的英文单词,输出格式为:单词 词性

你可能感兴趣的:(Python,NLP,python,自然语言处理,数据清洗,词性标注)