【发布时间】:2018-01-05 10:51:35
【问题描述】:
考虑句子
msg = 'I got this URL https://stackoverflow.com/questions/47637005/handmade-estimator-modifies-parameters-in-init/47637293?noredirect=1#comment82268544_47637293 freed'
接下来,我使用开箱即用的spaCy 处理英文句子:
import spacy
nlp = spacy.load('en')
doc = nlp(msg)
让我们回顾一下[(t, t.lemma_, t.pos_, t.tag_, t.dep_) for t in doc]的输出:
[(I, '-PRON-', 'PRON', 'PRP', 'nsubj'),
(got, 'get', 'VERB', 'VBD', 'ROOT'),
(this, 'this', 'DET', 'DT', 'det'),
(URL, 'url', 'NOUN', 'NN', 'compound'),
(https://stackoverflow.com/questions/47637005/handmade-estimator-modifies-parameters-in-init/47637293?noredirect=1#comment82268544_47637293,
'https://stackoverflow.com/questions/47637005/handmade-estimator-modifies-parameters-in-init/47637293?noredirect=1#comment82268544_47637293',
'NOUN',
'NN',
'nsubj'),
(freed, 'free', 'VERB', 'VBN', 'ccomp')]
我想改进对 URL 片段的处理。特别是,我想:
- 将其
lemma设置为stackoverflow.com - 将
tag设置为URL
我怎样才能使用spaCy 做到这一点?我想使用正则表达式(如建议的here)来确定字符串是否为 URL 并获取域。到目前为止,我还没有找到方法。
EDIT 我想我需要一个自定义组件。但是,似乎没有办法将基于正则表达式(或任何其他)的可调用对象设置为 patterns。
【问题讨论】:
-
我建议使用
urlparse.urlsplit进行 URL 处理和解析。您在此处称为 lemma 的内容将存储在netloc属性中的结果中。 -
@TomášLinhart 感谢您的指点。尽管如此,我还是不明白如何丰富
sapCy产生的Doc类型 -
要么创建一个包含 URL 解析的包装器,要么创建一个 URL 解析的第二遍。 sPacy 英语模型是用人类语言训练的。 URL 规范是人为的。可以使用其他库有效地解析它们。
-
要么创建一个包含 URL 解析的包装器,要么创建一个 URL 解析的第二遍。 sPacy 英语模型是用人类语言训练的。 URL 规范是人为的。可以使用其他库有效地解析它们。