2016-05-24 11 views
0

Ich habe eine Textdatei, aus der ich extrahieren muss, auf welche Rolle die Leute arbeiten. „Mechanical Engineer“, „Software-Entwickler“ usw. Ich habe NLTK verwendet, um diesen mit grammer zu extrahieren wiejob role aus Textdaten

grammer= r""" 
      NP: {<NN.*|JJ>*<NN.*>} """ 

das Ergebnis ich bin immer gut ist, aber immer noch für wenig documnets Junk kommt. Für diese Zeilen möchte ich Reguläre Ausdrücke anwenden.

meine Beispieltexte sind so.

  • "Ich bin Softwareentwicklung Ingenieur in Microsoft"
  • "Ich bin Maschinenbauingenieur mit 10 Jahren Erfahrung"

, was ich will, werde ich zwei oder drei Worte, bevor "Engineer" extrahieren . Ich bin mit regulären Ausdrücken wie,

regex=re.compile('|'.join([r'(?:\S+\s)?\S*[eE]ngineer'])) 

aber, extrahiert sie nur ein Wort vor dem bestimmten Wort. Wie man es macht, um zwei oder mehr Wörter zu extrahieren.

Ich habe versucht {2-3} anstelle von "?" im Ausdruck. aber ich bekomme kein gewünschtes Ergebnis.

Ist meine Vorgehensweise korrekt? oder ein anderer Ansatz, um diese spezifische Phrase in besserer Weise zu extrahieren?

+1

wenn Sie extrahieren zwei Wörter zweiten Beispiel erhalten begonnen wird 'am mechanica' bekommen Ich Ingenieur ... ist das ok? – rock321987

+0

check ** [this] (https://regex101.com/r/xR6eU5/1#pcre) ** – rock321987

+0

das ist, was mein Problem ist. Ich möchte keine überflüssigen Wörter extrahieren. Es ist, wo ich stecke., Aber irgendwie kann ich Wörter wie "bin" ausschließen, bevor ich reDEX anwende. – Bhimasen

Antwort

1

Die Regex

(\w+\s){2,3}dog 

Wird

over the lazy dog 
the lazy dog 

In

The quick brown fox jumps over the lazy dog the lazy dog 

passen Dies sollte Sie Ihnen Ich denke

Verwandte Themen