2016-05-18 23 views
2

I m einen Satz aus Excel-Datei zu lesen (bio Daten enthalten) und wollen die Organisationen extrahieren, wo sie arbeiten. Die Datei enthält auch Sätze, die angeben, wo die Person studiert. ex:wie auszuschließen Sätze bestimmtes Wort enthalten

  • i in 'x' instition studierte (Universität)
  • i m Student in 'y' College

ich diese Art von Sätzen überspringen will.

ich regulären Ausdruck verwenden diese Sätze anzupassen, und wenn sie im Zusammenhang mit Schülern dann den Teil überspringen, und nur andere Linien i in einer separaten Excel-Datei schreiben mag.

mein Code wie unten ..

CSVData = pandas.read_csv ("dateiname.csv", ""); für Daten in CSVData:

 regEX=re.compile('|'.join([r'\bstudent\b',r'\bstudy[ing]\b']),re.I) 
     matched_data=re.match(regEX,data) 
     if matched_data is not None: 
      continue 

     else: 
      ## write the sentence to excel 

Aber, wenn ich die neu erstellte Excel-Datei zu überprüfen, enthält es noch die Sätze, die ‚Student‘, ‚Studie‘ enthalten. Wie regulärer Ausdruck geändert werden kann, um das Ergebnis zu erhalten. hier

Antwort

1

Es gibt 2 Dinge:

1) Verwenden Sie re.search (re.match nur an der Schnur Start sucht)
2) Die Regex regEX=re.compile(r"\b(?:{})\b".format('|'.join([r'student',r'study(?:ing)?'])),re.I)

Die [ing] nur Spiele 1 Symbol sein sollte, entweder i, n oder g während Sie soll einen optionaling Ende entsprechen. Eine nicht-einfangende Gruppe mit einem Quantifizierer ? - (?:ing)? - ist tatsächlich passend 1 oder 0 Sequenzen von ing s.

Außerdem ist \b(x|y)\b ein effizienteres Muster als \bx\b|\by\b, da es weniger Backtracking-Schritte erfordert.

Hier ist nur a demo von dem, was diese Regex wie folgt aussieht:

import re 
pat = r"\b(?:{})\b".format('|'.join([r'student',r'study(?:ing)?'])) 
print(pat) 
# => \b(?:student|study(?:ing)?)\b 
regEX=re.compile(pat,re.I) 
s = "He is studying here." 
mObj = regEX.search(s) 
if mObj: 
    print(mObj.group(0)) 
# => studying 
+0

ich nicht Python verwenden und nicht wissen, wie String 'format'works, aber' \ b {} \ b 'sieht seltsam . Ist es richtig? – ClasG

+0

@ClasG: Leere '' {} in der 'format' Methode [* verweist implizit das erste Positions Argument *] (https://docs.python.org/2/library/string.html#format-string-syntax) . –

+0

OK. Aber das würde bedeuten, dass es zu '\ bstudent | study (?: Ing) \ b' erweitert wird, was zum Beispiel" studentdorm "und" chemiestudy "erlaubt. (Ich weiß, dass man Wörter auf Englisch nicht miteinander verbindet, aber ...) Könnte, was OP will, aber nicht, was der Beispielcode impliziert. Sprechen Sie wieder nicht Python, aber könnte es "korrigiert" werden, indem man das ''|'' in '\ b | \ b'' ändert? – ClasG

Verwandte Themen