我有下面的代码:
import nltk
exampleArray = ['The dog barking']
def processLanguage():
for item in exampleArray:
tokenized = nltk.word_tokenize(item)
tagged = nltk.pos_tag(tokenized)
print(tagged)
processLanguage()
上面代码的输出是带标记的单词及其相应的词性。示例:
[('The', 'DT'), ('dog', 'NN'), ('barking', 'NN'), ('.', '.')]
DT = determiner
NN = noun
该文本应该是
The dog is barking
并且应该具有POS序列
DT -> NN -> VBZ -> VBG
VBZ = verb, present tense, 3rd person singular
VBG = verb, present participle or gerund
我将如何使程序在句子中找到遗漏单词的位置?
这是直接的语法检查。您至少需要一个标记器,一个用于注释部分语音标记(POS)的工具和一个解析器,最好是诸如Early parser(https://en.wikipedia.org/wiki/Earley_parser)之类的东西或其他能够在给定短语结构语法的情况下分析树结构的东西。 (PSG)的目标语言。不管您选择哪种特定算法,请始终记住自然语言在chosmky层次结构中至少对上下文不敏感,因此请忽略有限状态自动机等。如果解析器未将您的句子验证为语法(从语言学角度讲,未经PSG许可),您可以使用树形结构来定位某些终端符号未使用或不正确使用的位置。您还需要做的另一件事是形态和大小写标记,它可以检查动词和自变量等一致的错误,以便排除诸如“狗在吠叫”之类的句子。也许还可以看看LFG或HPSG实现,它们以更彻底的方式实现了这一目标,因为它们在计算上更加强大(上下文相关工具,换句话说就是线性有界图灵机)。