python - 获取副词和形容词对应的动词和名词

标签 python nlp nltk stanford-nlp

如何在python中获取副词和形容词对应的动词和名词?看起来简单的继承和优先级可能不是很准确。可能有停用词,例如。在我很高兴学习...

我不能将任何库甚至问题陈述形式化。

立即编写代码。现在我想为句子中的每个形容词返回相应的副词动词和名词。 请帮忙。

Code:
def pos_func(input_text):
    #pos tagging code:
    text=input_text
    tokens=tokenize_words(text)
    tagged=pos_tag(tokens)
    pos_store(tagged)

def pos_store(tagged):
    verbs=[]
    adjectives=[]
    adverbs=[]
    nouns=[]
    for tag in tagged:
        pos=tag[1]
        if pos[0]=='V':
            verbs.append(tag[0])
        elif pos[0]=='N':
            nouns.append(tag[0])
        elif pos[0]=='J':
            adjectives.append(tag[0])
        elif pos[0:2]=='RB':
            adverbs.append(tag[0])


def tokenize_words(text):
    tokens = TreebankWordTokenizer().tokenize(text)
    contractions = ["n't", "'ll", "'m"]
    fix = []
    for i in range(len(tokens)):
        for c in contractions:
            if tokens[i] == c: fix.append(i)
    fix_offset = 0
    for fix_id in fix:
        idx = fix_id - 1 - fix_offset
        tokens[idx] = tokens[idx] + tokens[idx+1]
        del tokens[idx+1]
        fix_offset += 1
    return tokens

最佳答案

您尝试解决的一般问题称为依赖性解析。要提取单词之间的这种关系,您需要的不仅仅是简单词性标注分析提供的线性单词序列。考虑以下句子:

“他买了一辆又漂亮又快的车。”你会提取 (beautiful, car) 和 (fast, car)。您面临的问题不仅仅是过滤名词和副词之间的停用词。使用解析树分析可以让您更好地理解为什么这不是您可以使用单词序列解决的问题。

这是我们句子的解析树:

(ROOT
  (S
    (NP (PRP He))
    (VP (VBD bought)
      (NP (DT a)
        (ADJP (JJ beautiful)
          (CC and)
          (JJ fast))
        (NN car)))
    (. .)))

如您所见,“a beautiful and fast car”是一个名词短语 (NP),包含限定词 (DT)、形容词短语 (ADJP, "beautiful and fast") 和名词 (NN, "car")。一种使用了一段时间的方法是创建一个基于规则的系统,从这个解析树中提取对。幸运的是,已经开发出更好的东西来直接解决您的问题。

DependencyGraph

依赖对是:

nsubj(bought-2, He-1)
root(ROOT-0, bought-2)
det(car-7, a-3)
amod(car-7, beautiful-4)
cc(beautiful-4, and-5)
conj:and(beautiful-4, fast-6)
amod(car-7, fast-6)
dobj(bought-2, car-7)

如您所见,这正是您所需要的。这些是类型化的依赖项,因此您还需要过滤您感兴趣的依赖项(amodadvmod 在您的案例中)

您可以在此处找到依赖类型的完整列表:http://nlp.stanford.edu/software/dependencies_manual.pdf 斯坦福解析器演示:http://nlp.stanford.edu:8080/parser/ 斯坦福核心 NLP 演示(用于炫酷的可视化):http://nlp.stanford.edu:8080/corenlp/

您可以在此处阅读一篇关于在 Python 中创建依赖项解析器的精彩文章(不过您将需要训练数据):https://honnibal.wordpress.com/2013/12/18/a-simple-fast-algorithm-for-natural-language-dependency-parsing/

CoreNLP 的 Python 接口(interface):https://github.com/dasmith/stanford-corenlp-python

您也可以尝试编写自己的依赖语法,NLTK 为此提供了一个 API(查找 “5 依赖和依赖语法” 章):http://www.nltk.org/book/ch08.html

关于python - 获取副词和形容词对应的动词和名词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32329039/

相关文章:

python - nltk 'unknown url' 错误

python - NLTK的一些问题

python - 在路径中创建缺少的目录

nlp - 如何开始使用 NLP 进行文本摘要项目?

python - 多处理 - 进程拥有我的电脑

java - 文档中的项目符号在 GATE NLP 中变成问号

machine-learning - 用于日记条目情感分析的数据集

python - 删除停用词 Python

python - numpy.astype 与 numba 的非常奇怪的结果

开始新月份时的 Python 日期问题