📜  Python中的文本预处理 |设置 2

📅  最后修改于: 2022-05-13 01:55:48.486000             🧑  作者: Mango

Python中的文本预处理 |设置 2

先决条件:NLP 简介, Python中的文本预处理 |设置 1

在上一篇文章中,我们看到了处理文本数据时的基本预处理步骤。在本文中,我们将介绍一些更高级的文本预处理技术。我们可以使用这些技术来更深入地了解我们拥有的数据。

让我们导入必要的库。

# import the necessary libraries
import nltk
import string
import re

部分语音标记:

词性解释了一个词在句子中的使用方式。在一个句子中,一个词可以有不同的上下文和语义含义。像词袋这样的基本自然语言处理模型无法识别单词之间的这些关系。因此,我们使用词性标记来根据其在数据中的上下文将单词标记为其词性标记。它还用于提取单词之间的关系。

from nltk.tokenize import word_tokenize
from nltk import pos_tag
  
# convert text into word_tokens with their tags
def pos_tagging(text):
    word_tokens = word_tokenize(text)
    return pos_tag(word_tokens)
  
pos_tagging('You just gave me a scare')

例子:

在给定的示例中,PRP 代表人称代词,RB 代表副词,VBD 代表动词过去时,DT 代表限定词,NN 代表名词。我们可以使用 Penn Treebank 标签集获取所有词性标签的详细信息。

# download the tagset 
nltk.download('tagsets')
  
# extract information about the tag
nltk.help.upenn_tagset('NN')

例子:

分块:

分块是从非结构化文本中提取短语和更多结构的过程。它也被称为浅解析。它是在词性标记之上完成的。它将单词分组为“块”,主要是名词短语。分块是使用正则表达式完成的。

from nltk.tokenize import word_tokenize 
from nltk import pos_tag
  
# define chunking function with text and regular
# expression representing grammar as parameter
def chunking(text, grammar):
    word_tokens = word_tokenize(text)
  
    # label words with part of speech
    word_pos = pos_tag(word_tokens)
  
    # create a chunk parser using grammar
    chunkParser = nltk.RegexpParser(grammar)
  
    # test it on the list of word tokens with tagged pos
    tree = chunkParser.parse(word_pos)
      
    for subtree in tree.subtrees():
        print(subtree)
    tree.draw()
      
sentence = 'the little yellow bird is flying in the sky'
grammar = "NP: {
?*}" chunking(sentence, grammar)

在给定的示例中,语法是使用简单的正则表达式规则定义的。这条规则说,只要分块器找到一个可选的限定词 (DT) 后跟任意数量的形容词 (JJ) 和一个名词 (NN),就应该形成一个 NP(名词短语)块。

spaCy 和 Textblob 等库更适合分块。

例子:

命名实体识别:

命名实体识别用于从非结构化文本中提取信息。它用于将文本中存在的实体分类为人、组织、事件、地点等类别。它为我们提供了有关文本和不同实体之间关系的详细知识。

from nltk.tokenize import word_tokenize
from nltk import pos_tag, ne_chunk
  
def named_entity_recognition(text):
    # tokenize the text
    word_tokens = word_tokenize(text)
  
    # part of speech tagging of words
    word_pos = pos_tag(word_tokens)
  
    # tree of word entities
    print(ne_chunk(word_pos))
  
text = 'Bill works for GeeksforGeeks so he went to Delhi for a meetup.'
named_entity_recognition(text)

例子: