我一直在使用pyStatParser库从文本生成无上下文语法,如下所示:
import stat_parser
p = stat_parser.Parser()
grammar = set()
for sentence in sent_tokenize("sometext"):
grammar.update(set(p.parse(sentence).productions()))
print(grammar)
输入:
"The quick brown fox jumps over the lazy dog"
输出
[NP+S -> NP VP, NP -> DT NN, DT -> 'the', NN -> 'quick', VP -> VB NP, VB -> 'brown', NP -> NP PP, NP -> JJ NN, JJ -> 'fox', NN -> 'jumps', PP -> IN NP, IN -> 'over', NP -> DT JJ NN, DT -> 'the', JJ -> 'lazy', NN -> 'dog']
从这个语法中,可以很容易地得出随机句子。 然而,这是非常耗时的,所以我查看了其他图书馆,并找到了Spacy。我找不到像以前的库那样创建CFG的方法。
问题:我可以在spacy中创建CFG吗?如果没有,我如何使用这个库来分析文本的语法,然后从这个语法中推导出一个新的句子?
答案 0 :(得分:1)
Spacy解析并创建依赖关系。由依赖语法产生的树可以与由无上下文语法产生的树进行一对一映射。但是,Spacy没有应用显式语法来解析。相反,它使用神经网络来决定如何根据具体情况放置依赖关系,因此如果您想从大量生成的解析树派生无上下文语法,您可能会发现结果是欠约束。作为解析器和标记器的基础的神经网络已经在语料库上进行了训练,每个语法都是根据某种语法手工注释的,因此回到源并获得用于语法的语法可能是有意义的。解析语料库。