NLP |用 Regex 进行部分解析
原文:https://www.geesforgeks.org/NLP-partial-parsing-with-regex/
- 定义语法来解析 3 种短语类型。
- 查找可选限定词后跟一个或多个名词的 ChunkRule 类用于名词短语。
- 要在名词块的前面添加一个形容词,可以使用 MergeRule 类。
- 任何一个输入单词都是由介词短语组成的。
- 跟在动词后面的可选语气词(如 should)被组块成动词短语。
代码#1 :
chunker = RegexpParser(r'''
NP:
# chunk optional determiner with nouns
{<DT>?<NN.*>+}
# merge adjective with noun chunk
<JJ>{}<NN.*>
PP:
# chunk preposition
{<IN>}
VP:
# chunk optional modal with verb
{<MD>?<VB.*>} ''')
from nltk.corpus import conll2000
score = chunker.evaluate(conll2000.chunked_sents())
print ("Accuracy : ", score.accuracy())
输出:
Accuracy : 0.6148573545757688
treebank_chunk 语料库是 treebank 语料库的特殊版本,它提供了 chunked_sents()方法。由于其文件格式,常规的树库语料库不能提供这种方法。
代码#2:使用树库_组块
from nltk.corpus import treebank_chunk
treebank_score = chunker.evaluate(
treebank_chunk.chunked_sents())
print ("Accuracy : ", treebank_score.accuracy()
输出:
Accuracy : 0.49033970276008493
组块得分度量 它提供除准确性之外的度量。在组块中 精确表示有多少是正确的。 回忆意味着与总组块数相比,组块人在找到正确组块方面做得有多好。 代码#3:组块得分度量
print ("Precision : ", score.precision())
print ("\nRecall : ", score.recall())
print ("\nLength for missed one : ", len(score.missed()))
print ("\nLength for incorrect one : ", len(score.incorrect()))
print ("\nLength for correct one : ", len(score.correct()))
print ("\nLength for guessed one : ", len(score.guessed()))
输出:
Precision : 0.60201948127375
Recall : 0.606072502505847
Length for missed one : 47161
Length for incorrect one : 47967
Length for correct one : 119720
Length for guessed one : 120526