Разделение на несуществующие фразы в SpaCy - PullRequest
0 голосов
/ 20 февраля 2020

Извините, если это кажется глупым вопросом, но я все еще плохо знаком с Python и SpaCy.

У меня есть фрейм данных, который содержит жалобы клиентов. Это выглядит примерно так:

df = pd.DataFrame( [[1, 'I was waiting at the bus stop and then suddenly the car mounted the pavement'],
                    [2, 'When we got on the bus, we went upstairs but the bus braked hard and I fell'], 
                    [3, 'The bus was clearly in the wrong lane when it crashed into my car']], 
                    columns = ['ID', 'Text']) 

Если я хочу получить существительные фразы, тогда я могу сделать это:

def extract_noun_phrases(text):
    return [(chunk.text, chunk.label_) for chunk in nlp(text).noun_chunks]

def add_noun_phrases(df):
    df['noun_phrases'] = df['Text'].apply(extract_noun_phrases)

add_noun_phrases(df)

Как насчет того, если я хочу извлечь предложные фразы из df? Итак, специально пытаясь извлечь строки, такие как:

  • at the bus stop
  • in the wrong lane

Я знаю, что предполагается использовать subtree для этого, но я не понимаю, как применить его к моему набору данных.

1 Ответ

2 голосов
/ 21 февраля 2020

Предлагательная фраза - это просто предлог, за которым следует именная фраза.

Поскольку вы уже знаете, как идентифицировать именные фразы с помощью noun_chunks, это может быть так же просто, как проверить токен перед именной фразой. Если это preceding_token.pos_ означает «ADP» (APD означает сложение, а предлог - это тип сложения.)), То вы, вероятно, нашли фразу предложения.

Вместо проверки pos_, вы можете проверить является ли preceding_token.dep_ «подготовительным» вместо этого. Это зависит от того, какие элементы конвейера SpaCy вы включили, но результаты должны быть похожими.

...