📜  自然语言处理 |使用 RegEx 扩展和删除块

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

自然语言处理 |使用 RegEx 扩展和删除块

RegexpParser 或 RegexpChunkRule.fromstring()不支持所有RegexpChunkRule classes 。因此,我们需要手动创建它们。

本文重点介绍其中 3 个此类:

ExpandRightRule:它在块的右侧添加 chink(未分块)单词。
ExpandLeftRule:它在块的左侧添加 chink(未分块)单词。
对于ExpandLeftRuleExpandRightRule以作为参数 - 我们要分别添加到块的开头和结尾的右侧和左侧裂缝模式。

UnChunkRule:它取消任何匹配的块,它变成一个缝隙。

代码 #1:代码的工作原理

# Loading Libraries
from nltk.chunk.regexp import ChunkRule, ExpandLeftRule
from nltk.chunk.regexp import ExpandRightRule, UnChunkRule
from nltk.chunk import RegexpChunkParser
  
# Initialising ChunkRule
ur = ChunkRule('', 'single noun')
  
# Initialising ExpandLeftRule
el = ExpandLeftRule('
', '', 'get left determiner')    # Initialising ExpandRightRule er = ExpandRightRule('', '', 'get right plural noun')    # Initialising UnChunkRule un = UnChunkRule('
*', 'unchunk everything')    chunker = RegexpChunkParser([ur, el, er, un])    sent = [('the', 'DT'), ('sushi', 'NN'), ('rolls', 'NNS')]    chunker.parse(sent)

输出:

Tree('S', [('the', 'DT'), ('sushi', 'NN'), ('rolls', 'NNS')])

注意:输出是一个平句,因为 UnChunkRule 取消了前面规则创建的块。

这些东西是如何工作的?

  • 用名词做一个块。
  • 将左限定词扩展到以名词开头的块。
  • 将正确的复数名词扩展为以名词结尾的块。
  • 最后,它解开每个由限定词 + 名词 + 复数名词组成的块,得到原始句子树。

代码#2:逐步代码解释图表。

# Loading Libraries
from nltk.chunk.regexp import ChunkRule, ExpandLeftRule
from nltk.chunk.regexp import ExpandRightRule, UnChunkRule
from nltk.chunk import RegexpChunkParser
from nltk.chunk.regexp import ChunkString
from nltk.tree import Tree
  
chunk_string = ChunkString(Tree('S', sent))
print ("Chunk String : ", chunk_string)
  
# Initialising ChunkRule
ur = ChunkRule('', 'single noun')
ur.apply(chunk_string)
print ("\nstep 1 : ", chunk_string)
  
# Initialising ExpandLeftRule
el = ExpandLeftRule('
', '', 'get left determiner') el.apply(chunk_string) print ("step 2 : ", chunk_string)    # Initialising ExpandRightRule er = ExpandRightRule('', '', 'get right plural noun') er.apply(chunk_string) print ("step 3 : ", chunk_string)    # Initialising UnChunkRule un = UnChunkRule('
*', 'unchunk everything') un.apply(chunk_string) print ("step 4 : ", chunk_string)

输出 :

Chunk String :   
step 1 :
{} step 2 : {
} step 3 : {
} step 4 :