标签: stanford-nlp

好例子:英语解析/自然语言处理

我想制作一个日历应用程序,它比现有的那些更好地接受纯英文输入。我发现斯坦福的 NLP 看起来很酷,但我想知道它是否对此类任务有帮助。我找不到人们使用它做任何事情的例子。应用程序真的应该理解语言吗?似乎存在的自然英语日历正在寻找关键字/模式并尝试以这种方式解析,但我认为应用程序可以做得更好。

我真正的问题是:有人能告诉我如何找到使用 NLP 或不同(公开可用的)英语解析器来制作真正有用的应用程序的人的例子吗?

parsing nlp stanford-nlp

5
推荐指数
1
解决办法
5444
查看次数

使用斯坦福 CoreNLP 进行关系提取

我正在尝试使用斯坦福 CoreNLP 库从自然语言内容中提取信息。

我的目标是从句子中提取“主语-动作-宾语”对(简化)。

作为一个例子,请考虑以下句子:

约翰·史密斯午餐只吃一个苹果和一个香蕉。他正在节食,他的母亲告诉他,午餐少吃一点会非常健康。约翰一点也不喜欢,但由于他对饮食非常严格,所以他不想停止。

从这句话我想得到如下结果:

  • 约翰·史密斯 - 吃 - 午餐只吃一个苹果和一个香蕉
  • 他 - 正在 - 节食
  • 他的母亲告诉他,午餐少吃会非常健康。
  • 约翰 - 不喜欢 - (一点也不)
  • 他——是——对他的饮食很认真

一个人会怎样做呢?

或者更具体地说:如何解析依赖树(或更适合的树?)以获得上面指定的结果?

任何给定此任务的提示、资源或代码片段都将受到高度赞赏。

旁注:我设法用它们的代表性提及替换共指,然后将he和更改his为相应的实体(在这种情况下为约翰·史密斯)。

nlp text-mining stanford-nlp

5
推荐指数
1
解决办法
5097
查看次数

Java 中的 spaCy 替代品

我目前使用 spaCy 来遍历依赖树并生成实体。

nlp = get_spacy_model(detect_lang(unicode_text))
doc = nlp(unicode_text)

entities = set()
for sentence in doc.sents:

  # traverse tree picking up entities
  for token in sentence.subtree:
    ## pick entitites using some pre-defined rules

entities.discard('')
return entities
Run Code Online (Sandbox Code Playgroud)

spaCy 有什么好的 Java 替代品吗?

我正在寻找像 spaCy 那样生成依赖树的库。

编辑:

我研究了斯坦福解析器。但是,它生成了以下解析树:

                     ROOT
                      |
                      NP
       _______________|_________
      |                         NP
      |                _________|___
      |               |             PP
      |               |     ________|___
      NP              NP   |            NP
  ____|__________     |    |     _______|____
 DT   JJ    JJ   NN  NNS   IN   DT      JJ   NN
 |    |     |    | …
Run Code Online (Sandbox Code Playgroud)

nlp pos-tagger stanford-nlp spacy

5
推荐指数
1
解决办法
1万
查看次数

stanford-nlp 中使用 python 的回指解析

我正在尝试进行回指解析,下面是我的代码。

首先,我导航到下载 stanford 模块的文件夹。然后我在命令提示符下运行命令来初始化 stanford nlp 模块

java -mx4g -cp "*;stanford-corenlp-full-2017-06-09/*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer -port 9000 -timeout 15000
Run Code Online (Sandbox Code Playgroud)

之后我在 Python 中执行以下代码

from pycorenlp import StanfordCoreNLP
nlp = StanfordCoreNLP('http://localhost:9000')
Run Code Online (Sandbox Code Playgroud)

我想换句Tom is a smart boy. He know a lot of thing.Tom is a smart boy. Tom know a lot of thing.并没有教程或在Python提供任何帮助。

我所能做的就是通过以下 Python 代码进行注释

共指解析

output = nlp.annotate(sentence, properties={'annotators':'dcoref','outputFormat':'json','ner.useSUTime':'false'})
Run Code Online (Sandbox Code Playgroud)

并通过解析 coref

coreferences = output['corefs']
Run Code Online (Sandbox Code Playgroud)

我低于 JSON

coreferences

{u'1': [{u'animacy': u'ANIMATE',
   u'endIndex': 2,
   u'gender': u'MALE',
   u'headIndex': 1,
   u'id': 1,
   u'isRepresentativeMention': True, …
Run Code Online (Sandbox Code Playgroud)

python nlp linguistics stanford-nlp pycorenlp

5
推荐指数
1
解决办法
3169
查看次数

NLP:在 doc2vec / word2vec 中进行预处理

一些关于词和文档嵌入主题的论文(word2vec、doc2vec)提到他们使用斯坦福 CoreNLP 框架来标记/词形还原/词性标记输入的词/句子:

语料库使用斯坦福 CoreNLP (Manning et al., 2014) 进行词形还原和 POS 标记,并且每个标记都被替换为其引理和词性标记

( http://www.ep.liu.se/ecp/131/039/ecp17131039.pdf )

对于预处理,我们使用斯坦福 CoreNLP 对单词进行标记和小写

( https://arxiv.org/pdf/1607.05368.pdf )

所以我的问题是:

  • 为什么第一篇论文应用 POS 标签?然后每个令牌会被替换为类似的东西{lemma}_{POS},整个东西用来训练模型吗?还是标签用于过滤令牌?例如,gensims WikiCorpus 默认应用词形还原,然后只保留几种类型的词性(动词、名词等)并去除其余部分。那么推荐的方式是什么?

  • 在我看来,第二篇论文中的引述就像他们只是将单词分开然后小写。这也是我在使用维基语料库之前第一次尝试的。在我看来,这应该为文档嵌入提供更好的结果,因为大多数 POS 类型都有助于句子的含义。我对吗?

在最初的 doc2vec 论文中,我没有找到有关其预处理的详细信息。

nlp stanford-nlp gensim word2vec doc2vec

5
推荐指数
1
解决办法
517
查看次数

TypeError:stat:路径应该是字符串、字节、os.PathLike 或整数,而不是 _io.TextIOWrapper

我在一个python教程网站上找到了以下代码:

from nltk.tag import StanfordNERTagger

stanford_classifier = open("english.all.3class.distsim.crf.ser.gz")
stanford_ner_path = open("stanford-ner.jar")

st = StanfordNERTagger(stanford_classifier, stanford_ner_path)
Run Code Online (Sandbox Code Playgroud)

错误如下:

from nltk.tag import StanfordNERTagger

stanford_classifier = open("english.all.3class.distsim.crf.ser.gz")
stanford_ner_path = open("stanford-ner.jar")

st = StanfordNERTagger(stanford_classifier, stanford_ner_path)
Run Code Online (Sandbox Code Playgroud)

python file-io typeerror stanford-nlp python-3.x

5
推荐指数
1
解决办法
9万
查看次数

如何根据依赖解析器的输出生成树?

我试图从依赖解析器的输出中创建一棵树(嵌套字典)。这句话是“我在睡梦中射杀了一头大象”。我能够获得链接中所述的输出: How do I do dependency parsing in NLTK?

nsubj(shot-2, I-1)
det(elephant-4, an-3)
dobj(shot-2, elephant-4)
prep(shot-2, in-5)
poss(sleep-7, my-6)
pobj(in-5, sleep-7)
Run Code Online (Sandbox Code Playgroud)

为了将此元组列表转换为嵌套字典,我使用了以下链接: 如何将 python 元组列表转换为树?

def build_tree(list_of_tuples):
    all_nodes = {n[2]:((n[0], n[1]),{}) for n in list_of_tuples}
    root = {}    
    print all_nodes
    for item in list_of_tuples:
        rel, gov,dep = item
        if gov is not 'ROOT':
            all_nodes[gov][1][dep] = all_nodes[dep]
        else:
            root[dep] = all_nodes[dep]
    return root
Run Code Online (Sandbox Code Playgroud)

输出如下:

{'shot': (('ROOT', 'ROOT'),
  {'I': (('nsubj', 'shot'), {}),
   'elephant': (('dobj', 'shot'), {'an': (('det', 'elephant'), {})}),
   'sleep': (('nmod', 'shot'), …
Run Code Online (Sandbox Code Playgroud)

python dictionary nlp nltk stanford-nlp

5
推荐指数
1
解决办法
4214
查看次数

导入 StanfordNER 标记器 Google Colab

我在尝试导入 StanfordNER Tagger 以用于 NER 时遇到了一些问题。这是我的代码(从这里的其他帖子中提取了部分代码):

import os
def install_java():
  !apt-get install -y openjdk-8-jdk-headless -qq > /dev/null
  os.environ["JAVA_HOME"] = "/usr/lib/jvm/java-8-openjdk-amd64"
  !java -version
install_java()

!pip install StanfordCoreNLP
from stanfordcorenlp import StanfordCoreNLP
nlp = StanfordCoreNLP('stanford-corenlp', lang='en', memory='4g')
Run Code Online (Sandbox Code Playgroud)

我得到的错误突出显示了告诉我的最后一行代码:

OSError: stanford-corenlp is not a directory.
Run Code Online (Sandbox Code Playgroud)

任何帮助都会很棒!

编辑:这是另一行对我有用的代码。对于 StanfordNERTagger 中的内容,将这些文件加载​​到 Colab 中并提供路径名。对我最初提出的问题做同样的事情。为我工作。

from nltk.tag import StanfordNERTagger
from nltk.tokenize import word_tokenize



st = StanfordNERTagger('/content/english.muc.7class.distsim.crf.ser.gz',
                   '/content/stanford-ner.jar',
                   encoding='utf-8')

text = 'While in France, Christine Lagarde discussed short-term stimulus efforts in a recent interview with the Wall Street …
Run Code Online (Sandbox Code Playgroud)

python stanford-nlp google-colaboratory

5
推荐指数
1
解决办法
1001
查看次数

解析和词性标注有什么区别?

我知道词性标记会用适当的词性来标记句子中的每个单词,但这不也是解析器所做的吗?即,将一个句子分解为其组成部分?我在互联网上查过这一点,但找不到任何令人满意的解释。请解答我的疑惑。提前致谢

parsing nlp part-of-speech stanford-nlp

5
推荐指数
1
解决办法
1192
查看次数

把一个名词变成它的代词

我想用代词替换句子中的名词。我将使用它为 NLP 任务创建数据集。例如,如果我的句子是 -->

“杰克和瑞恩是朋友。杰克也是米歇尔的朋友。”

然后我想用“他”替换第二个杰克(斜体和粗体)。我已经完成了词性标注以在我的句子中找到名词。但我不知道如何从这里开始。如果我有一个可以使用的所有可能代词的列表,是否有一个语料库或系统可以告诉我最适合这个词的代词?

python nlp stanford-nlp python-3.x coreference-resolution

5
推荐指数
1
解决办法
210
查看次数