2016-11-06 7 views
4

ich diese Art von Informationen aus der folgenden Absatz Struktur zu extrahieren bin versucht:NLP - Informationsextraktion in Python (Spacy)

women_ran men_ran kids_ran walked 
     1  2  1  3 
     2  4  3  1 
     3  6  5  2 

text = ["On Tuesday, one women ran on the street while 2 men ran and 1 child ran on the sidewalk. Also, there were 3 people walking.", "One person was walking yesterday, but there were 2 women running as well as 4 men and 3 kids running.", "The other day, there were three women running and also 6 men and 5 kids running on the sidewalk. Also, there were 2 people walking in the park."] 

ich Python spaCy als meine NLP Bibliothek verwenden. Ich bin neuer in der NLP-Arbeit und hoffe auf eine Anleitung, was der beste Weg wäre, diese tabellarische Information aus solchen Sätzen zu extrahieren.

Wenn es nur darum ging, festzustellen, ob jemand läuft oder läuft, würde ich einfach sklearn verwenden, um ein Klassifizierungsmodell zu erstellen, aber die Informationen, die ich extrahieren muss, sind offensichtlich granularer als das (ich versuche es Unterkategorien und Werte für jedes abrufen). Jede Anleitung würde sehr geschätzt werden.

Antwort

7

Sie möchten die Abhängigkeitsparse dafür verwenden. Sie können eine Visualisierung Ihres Beispielsatzes mit the displaCy visualiser sehen.

Sie könnten die Regeln implementieren Sie ein paar verschiedene Möglichkeiten müssen - ähnlich wie wie es gibt immer mehrere Möglichkeiten, eine XPath-Abfrage, DOM Selektor usw. wie diese sollten

etwas zu schreiben arbeiten:

nlp = spacy.load('en') 
docs = [nlp(t) for t in text] 
for i, doc in enumerate(docs): 
    for j, sent in enumerate(doc.sents): 
     subjects = [w for w in sent if w.dep_ == 'nsubj'] 
     for subject in subjects: 
      numbers = [w for w in subject.lefts if w.dep_ == 'nummod'] 
      if len(numbers) == 1: 
       print('document.sentence: {}.{}, subject: {}, action: {}, numbers: {}'.format(i, j, subject.text, subject.head.text, numbers[0].text)) 

Für Ihre Beispiele in text sollten Sie:

document.sentence: 0.0, subject: men, action: ran, numbers: 2 
document.sentence: 0.0, subject: child, action: ran, numbers: 1 
document.sentence: 0.1, subject: people, action: walking, numbers: 3 
document.sentence: 1.0, subject: person, action: walking, numbers: One 
+0

ich habe noch nie eine XPath-Abfrage oder einem DOM-Selektor geschrieben. Könnten Sie bitte erklären? – kathystehl

+1

@kathystehl XPath gibt einen Speicherort in einem XML-Dokument (HTML) an. Eine XPath-Abfrage ist also eine Möglichkeit, ein bestimmtes Element in XML oder HTML zu finden. Siehe [Wikipedia] (https://en.wikipedia.org/wiki/XPath). Ein DOM-Selektor ist ein beliebiges CSS-Element "id" oder "class" in einem HTML-Dokument (das DOM ist die Datenstruktur für ein HTML/XML-Dokument/Baum, mit dem Sie in Javascript arbeiten usw.). So können Sie nach ID und Klasse filtern, um Elemente zu finden. Ein Dependency-Parser wandelt in NLP unstrukturierten Text in eine baumähnliche Struktur um, die HTML ähnelt und deren Tags mit DOM-Selektorfiltern und XPath-Abfragen abgefragt werden können. – hobs