2016-05-24 6 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