Поскольку мне сказали, что Spacy - такой мощный модуль Python для обработки естественной речи, я теперь отчаянно ищу способ сгруппировать слова вместе в нечто большее, чем словосочетания с существительными, и, что наиболее важно, предложные фразы. Я сомневаюсь, что для этого есть функция Spacy, но я думаю, это был бы самый простой способ (импорт SpacySpaCy уже реализован в моем проекте). Тем не менее, я открыт для любой возможности распознавания / разделения фраз.
Python: разбиение на части, отличные от существительных (например, предложных), с использованием Spacy и т. Д.
comment
Можете ли вы привести пример того, что конкретно вы хотите? Может быть, как пример ввода с соответствующим ему желаемым выводом.
- person Harrison   schedule 23.08.2016
comment
Конечно. В качестве перевода на немецкий язык возьмите предложение типа «Сколько времени я доберусь до университета?» (на немецком языке Wie lange brauche ich bis zur Uni?). Я хочу, чтобы [PREP] [DET] университет [NOUN] был разбит на части в качестве предложной фазы, либо удаленно зная, из чего состоит предложная фраза, либо указав точные правила (PP - ›PREP + NP), как в других модулях Python . Поскольку SpaCy используется для тегов в моей программе и, кажется, поддерживает только фрагменты существительных, я хотел бы иметь вспомогательный модуль или просто функцию внутри него для распознавания дополнительных фрагментов.
- person Malte Ge   schedule 23.08.2016
Ответы (1)
Вот решение для получения PP. Как правило, вы можете получать фразы, используя subtree
.
def get_pps(doc):
"Function to get PPs from a parsed document."
pps = []
for token in doc:
# Try this with other parts of speech for different subtrees.
if token.pos_ == 'ADP':
pp = ' '.join([tok.orth_ for tok in token.subtree])
pps.append(pp)
return pps
Использование:
import spacy
nlp = spacy.load('en_core_web_sm')
ex = 'A short man in blue jeans is working in the kitchen.'
doc = nlp(ex)
print(get_pps(doc))
Это печатает:
['in blue jeans', 'in the kitchen']
person
Emiel
schedule
29.10.2017
Откуда функция
nlp()
?
- person Hamman Samuel; 08.08.2018
Я обновил ответ.
nlp
относится к загруженному экземпляру SpaCy (согласно соглашению из документации SpaCy: spacy.io/usage).
- person Emiel; 09.08.2018
Спасибо, я столкнулся с другой проблемой с
spacy.load('en')
, которая была исправлена заменой ее на spacy.load('en_core_web_sm')
, решение взято из обсуждения системы отслеживания проблем на GitHub от spaCy github.com/explosion/spaCy/issues/1721#issuecomment-373241198
- person Hamman Samuel; 09.08.2018
Эй, мне было интересно, знает ли кто-нибудь, как применить это к df?
- person JassiL; 20.02.2020
Вообще говоря, вы можете создать новый столбец на основе значений из другого столбца, используя метод
apply
. Например: df['b'] = df['a'].apply(len)
создаст новый столбец (с меткой 'b'
) на основе значений в столбце с меткой 'a'
, используя встроенную функцию len
. Другими словами: второй столбец будет содержать длину элементов в столбце 'a'
. Вы можете использовать любую понравившуюся функцию, в том числе и ту, что есть в ответе. Но если столбец содержит строки, вам нужно сначала обработать строки.
- person Emiel; 22.02.2020