如何使用stanford解析器对java类中的字符串进行标记?
我只能找到documentProcessor和PTBTokenizer从外部文件中获取文本的示例.
DocumentPreprocessor dp = new DocumentPreprocessor("hello.txt");
for (List sentence : dp) {
System.out.println(sentence);
}
// option #2: By token
PTBTokenizer ptbt = new PTBTokenizer(new FileReader("hello.txt"),
new CoreLabelTokenFactory(), "");
for (CoreLabel label; ptbt.hasNext(); ) {
label = (CoreLabel) ptbt.next();
System.out.println(label);
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
有没有人有使用StanfordCoreNLP的经验(http://nlp.stanford.edu/software/corenlp.shtml通过r中的rJava?我现在一直在努力让它工作两天,并且认为我已经筋疲力尽了Google和之前关于StackOverflow的问题.
本质上我正在尝试使用R中的StanfordNLP库.我没有Java经验,但有其他语言的经验,所以要了解有关类和对象等的基础知识.
从我所看到的,随库提供的演示.java文件似乎表明,要使用Java中的类,您需要导入库然后创建一个新对象,类似于:
import java.io.*;
import java.util.*;
import edu.stanford.nlp.io.*;
import edu.stanford.nlp.ling.*;
import edu.stanford.nlp.pipeline.*;
import edu.stanford.nlp.trees.*;
import edu.stanford.nlp.util.*;
public class demo {
etc.
etc.
StanfordCoreNLP pipeline = new StanfordCoreNLP();
etc.
Run Code Online (Sandbox Code Playgroud)
从R内部,我试过调用一些标准的java函数; 这工作正常,这让我觉得这是我试图访问导致问题的斯坦福图书馆的方式.
我将斯坦福ZIP解压缩到h:\ stanfordcore,因此.jar文件都在此目录的根目录中.除了zip中包含的各种其他文件外,它还包含主要的.jar文件:
如果我尝试从命令行访问NLP工具,它可以正常工作.
在R中,我初始化了JVM并设置了classpath变量:
.jinit(classpath = " h:/stanfordcore", parameters = getOption("java.parameters"),silent = FALSE, force.init = TRUE)
Run Code Online (Sandbox Code Playgroud)
在此之后,如果我使用该命令
.jclassPath()
Run Code Online (Sandbox Code Playgroud)
这表明已添加包含所需.jar文件的目录,并在R中提供此输出:
[1]"H:\ RProject-2.15.1\library\rJava\java""h:\ stanfordcore"
但是,当我尝试创建一个新对象(不确定这是否是正确的Java术语)时,我收到一个错误.
我试过用几十种不同的方式创建对象(虽然基本上是在黑暗中拍摄),但最有希望的(因为它似乎实际上找到了类):
pipeline <- .jnew(class="edu/stanford/nlp/pipeline/StanfordCoreNLP",check=TRUE,silent=FALSE) …Run Code Online (Sandbox Code Playgroud) 我正在使用Stanford POS Tagger进行POS标记.标记器仅为输入句子返回一个可能的标记.例如,当提供输入句子"小丑哭泣"时,POS标签器产生(错误的)"The_DT clown_NN weeps_NNS ._.".
但是,我的应用程序将尝试解析结果,并可能拒绝POS标记,因为无法解析它.因此,在此示例中,它将拒绝"The_DT clown_NN weeps_NNS ._".但会接受"The_DT clown_NN weeps_VBZ ._." 我假设它是解析器的低置信度标记.
因此,我希望POS标记器为每个单词的标记提供多个假设,并通过某种置信度值进行注释.通过这种方式,我的应用程序可以选择具有最高置信度的POS标记,从而实现针对其目的的有效解析.
我发现没有办法要求Stanford POS Tagger为每个单词(甚至整个句子)产生多个(最好的)标记假设.有没有办法做到这一点?(或者,我也可以使用另一个具有相同性能的POS标记器来支持此功能.)
我正在尝试使用官方网站上给出的命令运行stanford nlp给出的openIE:http://nlp.stanford.edu/software/openie.shtml
java -mx1g -cp stanford-openie.jar:stanford-openie-models.jar edu.stanford.nlp.naturalli.OpenIE mytextfile.txt
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
at edu.stanford.nlp.pipeline.StanfordCoreNLP.<clinit>(StanfordCoreNLP.java:99)
at edu.stanford.nlp.naturalli.OpenIE.main(OpenIE.java:679)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 2 more
Run Code Online (Sandbox Code Playgroud)
当我运行给出的java代码时:
package edu.stanford.nlp.naturalli;
import edu.stanford.nlp.ie.util.RelationTriple;
import edu.stanford.nlp.ling.CoreAnnotations;
import edu.stanford.nlp.pipeline.Annotation;
import edu.stanford.nlp.pipeline.StanfordCoreNLP;
import edu.stanford.nlp.util.CoreMap;
import java.util.Collection;
import java.util.List;
import java.util.Properties;
public class OpenIEDemo {
public static void main(String[] args) throws Exception {
// Create the Stanford CoreNLP pipeline
Properties props = new Properties();
props.setProperty("annotators", …Run Code Online (Sandbox Code Playgroud) 我在python中使用nttk的Stanford解析器,并从Stanford Parser和NLTK获得帮助 以建立斯坦福nlp库.
from nltk.parse.stanford import StanfordParser
from nltk.parse.stanford import StanfordDependencyParser
parser = StanfordParser(model_path="edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz")
dep_parser = StanfordDependencyParser(model_path="edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz")
one = ("John sees Bill")
parsed_Sentence = parser.raw_parse(one)
# GUI
for line in parsed_Sentence:
print line
line.draw()
parsed_Sentence = [parse.tree() for parse in dep_parser.raw_parse(one)]
print parsed_Sentence
# GUI
for line in parsed_Sentence:
print line
line.draw()
Run Code Online (Sandbox Code Playgroud)
我得到了错误的解析和依赖树,如下例所示,它将'see'视为名词而不是动词.
我该怎么办?当我改变句子时,它完全正常工作,例如(一个='John see Bill').从这里正确的解析树输出可以看到这句话的正确输出
正确输出的示例如下所示:
我之前遇到过类似的问题,但我正在寻找一个可以回答的问题.我正在使用spark-corenlp在电子邮件中获得Sentiment分数.有时候,情绪()会在某些输入上崩溃(也许它太长了,也许它有意想不到的特征).它没有告诉我它在某些情况下崩溃,只是返回Column sentiment('email).因此,当我尝试show()超出某个点或save()我的数据框时,我得到一个java.util.NoSuchElementException因为sentiment()必须在该行没有返回任何内容.
我的初始代码是加载数据,并sentiment()如spark-corenlpAPI 所示应用.
val customSchema = StructType(Array(
StructField("contactId", StringType, true),
StructField("email", StringType, true))
)
// Load dataframe
val df = sqlContext.read
.format("com.databricks.spark.csv")
.option("delimiter","\t") // Delimiter is tab
.option("parserLib", "UNIVOCITY") // Parser, which deals better with the email formatting
.schema(customSchema) // Schema of the table
.load("emails") // Input file
val sent = df.select('contactId, sentiment('email).as('sentiment)) // Add sentiment analysis output to dataframe
Run Code Online (Sandbox Code Playgroud)
我试图过滤null和NaN值: …
我正在尝试创建一个R包,因此我可以使用来自R的Apache Spark(来自数据库)的Stanford CoreNLP包装器.我正在使用sparklyr包连接到我的本地Spark实例.我创建了一个包含以下依赖函数的包
spark_dependencies <- function(spark_version, scala_version, ...) {
sparklyr::spark_dependency(
jars = c(
system.file(
sprintf("stanford-corenlp-full/stanford-corenlp-3.6.0.jar"),
package = "sparkNLP"
),
system.file(
sprintf("stanford-corenlp-full/stanford-corenlp-3.6.0-models.jar"),
package = "sparkNLP"
),
system.file(
sprintf("stanford-corenlp-full/stanford-english-corenlp-2016-01-10-models.jar"),
package = "sparkNLP"
)
),
packages = c(sprintf("databricks:spark-corenlp:0.2.0-s_%s", scala_version))
)
}
Run Code Online (Sandbox Code Playgroud)
在日志中,我可以看到两个databricks包都加载了相关的jar.我将所有coreNLP解压缩到stanford-corenlp-full文件夹,因此应正确加载所有依赖项.
Ivy Default Cache set to: /Users/Bob/.ivy2/cache
The jars for the packages stored in: /Users/Bob/.ivy2/jars
:: loading settings :: url = jar:file:/Users/Bob/Library/Caches/spark/spark-2.0.0-bin-hadoop2.7/jars/ivy-2.4.0.jar!/org/apache/ivy/core/settings/ivysettings.xml
com.databricks#spark-csv_2.11 added as a dependency
com.amazonaws#aws-java-sdk-pom added as a dependency
databricks#spark-corenlp added as a dependency
:: resolving dependencies :: org.apache.spark#spark-submit-parent;1.0 …Run Code Online (Sandbox Code Playgroud) 我正在使用NLTK包装器测试StanfordNERTagger并出现此警告:
DeprecationWarning: The StanfordTokenizer will be deprecated in version
3.2.5. Please use nltk.tag.corenlp.CoreNLPPOSTagger or
nltk.tag.corenlp.CoreNLPNERTagger instead.
super(StanfordNERTagger, self).__init__(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
我的代码看起来像这样:
from nltk import word_tokenize, pos_tag, ne_chunk
from nltk.tag import StanfordNERTagger
sentence = "Today George went to school and met his friend Peter."
# stanford's NER tagger 3 entity classification
st = StanfordNERTagger('/home/hercules/Desktop/PhD/Tools/stanford-ner-
2017-06-09/classifiers/english.all.3class.distsim.crf.ser.gz',
'/home/hercules/Desktop/PhD/Tools/stanford-ner-2017-06-09/stanford-
ner.jar',
encoding='utf-8')
tokenized_text = word_tokenize(sentence)
classified_text = st.tag(tokenized_text)
print("Stanford NER tagger:")
print(classified_text)
Run Code Online (Sandbox Code Playgroud)
我试图使用CoreNLPNERTagger,但我找不到任何示例或文档.我只发现了这个链接: 它在类CoreNLPNERTagger(CoreNLPTagger)的注释中提供类似示例(我通过搜索关键字"CoreNLPNERTagger"找到它)
我试着不遵循这个例子.我想我应该首先启动(如果这是正确的术语)coreNLP服务器,但如果是这样,我不知道如何.
如果有人有任何想法或建议,我将不胜感激.
我正在使用Windows 8,并使用pyDev在eclipse中运行python.
我从网站上安装了Stanford coreNLP(python版本):https: //github.com/relwell/stanford-corenlp-python
当我尝试导入corenlp时,我收到以下错误消息.
Traceback (most recent call last):
File "C:\Users\Ghantauke\workspace\PythonTest2\test.py", line 1, in <module>
import corenlp
File "C:\Python27\lib\site-packages\corenlp\__init__.py", line 13, in <module>
from corenlp import StanfordCoreNLP, ParserError, TimeoutError, ProcessError
File "C:\Python27\lib\site-packages\corenlp\corenlp.py", line 28, in <module>
import pexpect
File "C:\Python27\lib\site-packages\pexpect.py", line 85, in <module>
support it. Pexpect is intended for UNIX-like operating systems.""")
ImportError: No module named resource
A critical module was not found. Probably this operating system does not
support it. Pexpect is intended for …Run Code Online (Sandbox Code Playgroud) 我试图用Stanford CoreNLP工具分析一些法语文本(这是我第一次尝试使用任何StanfordNLP软件)
为此,我已经下载了v3.6.0 jar和相应的法语模型.
然后我运行服务器:
java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer
Run Code Online (Sandbox Code Playgroud)
如本回答所述,我将API称为:
wget --post-data 'Bonjour le monde.' 'localhost:9000/?properties={"parse.model":"edu/stanford/nlp/models/parser/nndep/UD_French.gz", "annotators": "parse", "outputFormat": "json"}' -O -
Run Code Online (Sandbox Code Playgroud)
但我得到以下日志+错误:
[pool-1-thread-1] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP
Adding annotator tokenize
[pool-1-thread-1] INFO edu.stanford.nlp.pipeline.TokenizerAnnotator - TokenizerAnnotator: No tokenizer type provided. Defaulting to PTBTokenizer.
[pool-1-thread-1] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator ssplit
[pool-1-thread-1] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator parse
[pool-1-thread-1] INFO edu.stanford.nlp.parser.common.ParserGrammar - Loading parser from serialized file edu/stanford/nlp/models/parser/nndep/UD_French.gz ...
edu.stanford.nlp.io.RuntimeIOException: java.io.StreamCorruptedException: invalid stream header: 64696374
at edu.stanford.nlp.parser.common.ParserGrammar.loadModel(ParserGrammar.java:188)
at …Run Code Online (Sandbox Code Playgroud) stanford-nlp ×10
python ×3
apache-spark ×2
nlp ×2
nltk ×2
parsing ×2
r ×2
java ×1
linguistics ×1
pos-tagger ×1
rjava ×1
scala ×1
sparklyr ×1
tokenize ×1