- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个函数,它使用斯坦福 NER 返回给定文本正文中的命名实体。
def get_named_entities(text):
load_ner_files()
print text[:100] # to show that the text is fine
text_split = text.split()
print text_split # to show the split is working fine
result = "named entities = ", st.tag(text_split)
return result
我正在使用报纸 Python 包从 url 加载文本。
def get_page_text():
url = "https://aeon.co/essays/elon-musk-puts-his-case-for-a-multi-planet-civilisation"
page = Article(url)
page.download()
page.parse()
return unicodedata.normalize('NFKD', page.text).encode('ascii', 'ignore')
但是,当我运行该函数时,我得到以下输出:
['Fuck', 'Earth!', 'Elon', 'Musk', 'said', 'to', 'me,', 'laughing.', 'Who', 'cares', 'about', 'Earth?'......... (continued)
named entities = [('Fuck', 'O'), ('Earth', 'O'), ('!', 'O')]
所以我的问题是,为什么只标记前三个单词?
最佳答案
假设已正确设置 NLTK v3.2,请参阅
TL;DR:
pip install -U nltk
或
conda update nltk
<小时/>
设置NLTK和Stanford Tools后(记得设置环境变量):
import time
import urllib.request
from itertools import chain
from bs4 import BeautifulSoup
from nltk import word_tokenize, sent_tokenize
from nltk.tag import StanfordNERTagger
class Article:
def __init__(self, url, encoding='utf8'):
self.url = url
self.encoding='utf8'
self.text = self.fetch_url_text()
self.process_text()
def fetch_url_text(self):
response = urllib.request.urlopen(self.url)
self.data = response.read().decode(self.encoding)
self.bsoup = BeautifulSoup(self.data, 'html.parser')
return '\n'.join([paragraph.text for paragraph
in self.bsoup.find_all('p')])
def process_text(self):
self.paragraphs = [sent_tokenize(p.strip())
for p in self.text.split('\n') if p]
_sents = list(chain(*self.paragraphs))
self.sents = [word_tokenize(sent) for sent in _sents]
self.words = list(chain(*self.sents))
url = 'https://aeon.co/essays/elon-musk-puts-his-case-for-a-multi-planet-civilisation'
a1 = Article(url)
three_sentences = a1.sents[20:23]
st = StanfordNERTagger('english.all.3class.distsim.crf.ser.gz')
# Tag multiple sentences at one go.
start = time.time()
tagged_sents = st.tag_sents(three_sentences)
print ("Tagging took:", time.time() - start)
print (tagged_sents, end="\n\n")
for sent in tagged_sents:
print (sent)
print()
# (Much slower) Tagging sentences one at the time and
# Stanford NER is refired every time.
start = time.time()
tagged_sents = [st.tag(sent) for sent in three_sentences]
print ("Tagging took:", time.time() - start)
for sent in tagged_sents:
print (sent)
print()
[输出]:
Tagging took: 2.537247657775879
[[('Musk', 'PERSON'), ('was', 'O'), ('laughing', 'O'), ('because', 'O'), ('he', 'O'), ('was', 'O'), ('joking', 'O'), (':', 'O'), ('he', 'O'), ('cares', 'O'), ('a', 'O'), ('great', 'O'), ('deal', 'O'), ('about', 'O'), ('Earth', 'LOCATION'), ('.', 'O')], [('When', 'O'), ('he', 'O'), ('is', 'O'), ('not', 'O'), ('here', 'O'), ('at', 'O'), ('SpaceX', 'ORGANIZATION'), (',', 'O'), ('he', 'O'), ('is', 'O'), ('running', 'O'), ('an', 'O'), ('electric', 'O'), ('car', 'O'), ('company', 'O'), ('.', 'O')], [('But', 'O'), ('this', 'O'), ('is', 'O'), ('his', 'O'), ('manner', 'O'), ('.', 'O')]]
[('Musk', 'PERSON'), ('was', 'O'), ('laughing', 'O'), ('because', 'O'), ('he', 'O'), ('was', 'O'), ('joking', 'O'), (':', 'O'), ('he', 'O'), ('cares', 'O'), ('a', 'O'), ('great', 'O'), ('deal', 'O'), ('about', 'O'), ('Earth', 'LOCATION'), ('.', 'O')]
[('When', 'O'), ('he', 'O'), ('is', 'O'), ('not', 'O'), ('here', 'O'), ('at', 'O'), ('SpaceX', 'ORGANIZATION'), (',', 'O'), ('he', 'O'), ('is', 'O'), ('running', 'O'), ('an', 'O'), ('electric', 'O'), ('car', 'O'), ('company', 'O'), ('.', 'O')]
[('But', 'O'), ('this', 'O'), ('is', 'O'), ('his', 'O'), ('manner', 'O'), ('.', 'O')]
Tagging took: 7.375355243682861
[('Musk', 'PERSON'), ('was', 'O'), ('laughing', 'O'), ('because', 'O'), ('he', 'O'), ('was', 'O'), ('joking', 'O'), (':', 'O'), ('he', 'O'), ('cares', 'O'), ('a', 'O'), ('great', 'O'), ('deal', 'O'), ('about', 'O'), ('Earth', 'LOCATION'), ('.', 'O')]
[('When', 'O'), ('he', 'O'), ('is', 'O'), ('not', 'O'), ('here', 'O'), ('at', 'O'), ('SpaceX', 'ORGANIZATION'), (',', 'O'), ('he', 'O'), ('is', 'O'), ('running', 'O'), ('an', 'O'), ('electric', 'O'), ('car', 'O'), ('company', 'O'), ('.', 'O')]
[('But', 'O'), ('this', 'O'), ('is', 'O'), ('his', 'O'), ('manner', 'O'), ('.', 'O')]
关于python - NLTK 中的斯坦福 NER 未正确标记多个句子 - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35899656/
我在检测以小写字母开头的命名实体时遇到问题。如果我只用小写单词训练模型,那么准确率是合理的;但是,当模型使用完全大写的标记或什至是小写和大写混合训练时,结果非常糟糕。我尝试了斯坦福 NLP 小组提供的
这可能是一个愚蠢的问题,但是如何迭代解析树作为 NLP 解析器(如斯坦福 NLP)的输出?它都是嵌套的括号,既不是 array 也不是 dictionary 或我使用过的任何其他集合类型。 (ROOT
如何使用斯坦福解析器在 java 类中标记字符串? 我只能找到 documentProcessor 和 PTBTokenizer 从外部文件获取文本的示例。 DocumentPreprocessor
我的代码开头有以下内容: import twitter4j.*; import java.util.List; import java.util.Properties; import ja
这是我第一次在这里发帖;因此,如果我表现出任何不好的做法,请告诉我。 所以目前我正在尝试使用斯坦福大学的 OpenIE 从网络挖掘的数据中提取信息。由于我对 Java 很陌生,我只是从他们的页面复制了
我正在尝试使用斯坦福 CoreNLP 关系提取器 ( http://nlp.stanford.edu/software/relationExtractor.shtml )。 我已经安装了 CoreNL
我最近在使用Stanford Lexparser。不幸的是,我遇到了一个问题,因为它需要很长时间,特别是当我传递一个大文件时。多线程有助于提高性能吗?我知道多线程可以在命令行中轻松完成。但是,我想在内
原始推文已保存到以下结构的文件中: tweet language || tweet 以下是我的预处理阶段,用于删除 URL、RT、用户名和任何非字母数字字符。 def cleanTweets() {
在哪里可以找到有关基因、蛋白质、激素、转录因子、神经递质、细胞因子、生物标志物、表观遗传标志物、 enzyme 、RNA、器官、细胞、药物和疾病的斯坦福 NLP 命名实体识别库? 最佳答案 简而言之:
我在使用斯坦福大学的句子注释器时遇到了问题。作为输入,我得到了文本,其中包含句子,但其中某些部分的点后没有空格。像这样: Dog loves cat.Cat loves mouse. Mouse ha
通常,当您使用 corenlp 注释管道进行 NER 时,您将编写以下代码 Properties props = new Properties(); props.put("annotators", "
我正在尝试对推文进行情感分析,但出现奇怪的异常。 我正在使用属性文件初始化管道,并将属性文件放置在 src->main 文件夹内的资源目录中。 但在 init 函数中仍然出现异常: Exception
我正在尝试使用斯坦福库设置我的 NLP 解析器。在我下载的网站上 stanford-corenlp-full-2015-12-09.zip standford-french-corenlp-2016-
我正在尝试使用文件输入运行此代码并将其输出到另一个文件: import java.util.*; import edu.stanford.nlp.pipeline.*; import edu.stan
我正在Windows中做一个NLP项目,问题是每当我从命令提示符运行Stanford CoreNLP时,大约需要14-15秒才能生成给定输入文本文件的XML输出。我认为这个问题是因为库需要相当多的时间
我在 python 中使用斯坦福 NER 标记器。它没有标记日期和时间。相反,每个单词都返回 O。我的句子是: “多少钱才能在 3 年内以年利率 12% 的利率赚取 162 美元的利息” 我标记后得到
Soo... 该程序完全按照应有的方式运行,但我不明白该程序输出的花哨缩写是什么。 如果我输入'I wish today was a school day',程序会输出 I/PRP : wish/VB
我在 http://nlp.stanford.edu/software/stanford-corenlp-full-2015-04-20.zip 下载了 Stanford NLP 3.5.2 然后我解
在斯坦福自然语言处理中,有命名实体识别器功能来识别对话中的实体。有没有一种方法可以配置可以训练以指向特定意图的话语?类似于 LUIS (Microsoft)。 最佳答案 我正在使用 SharpNLP
我正在使用 Stanford CoreNLP 在 Windows 机器上运行 Java 的 NLP 项目。我想从这个注释一篇大文本文章。我写的代码如下; Properties props = new
我是一名优秀的程序员,十分优秀!