自然语言处理 |使用 RegEx 扩展和删除块
RegexpParser 或 RegexpChunkRule.fromstring()不支持所有RegexpChunkRule classes
。因此,我们需要手动创建它们。
本文重点介绍其中 3 个此类:
ExpandRightRule:它在块的右侧添加 chink(未分块)单词。
ExpandLeftRule:它在块的左侧添加 chink(未分块)单词。
对于ExpandLeftRule
和ExpandRightRule
以作为参数 - 我们要分别添加到块的开头和结尾的右侧和左侧裂缝模式。
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 :