Einen Regex entwerfen, um eine beliebige Phrase zu finden

8

Ich versuche, einen Chunker (oder oberflächlichen Parser) mit regulären Ausdrücken (und ohne NLTK) zu erstellen, aber ich kann keinen regulären Ausdruck finden, der tut, was ich tun soll. Hier ist mein unmittelbares Ziel: Finde alle Nominalphrasen in einem natürlichen Sprachtext.

Mein erster Schritt besteht darin, alle Sätze mit meinem selbstgebrauten Teil der Rede-Tagger-Tags zu versehen und dann die Liste der Token / Tag-Paare wie folgt in eine einzige Zeichenfolge zu integrieren:

%Vor%

Mein nächster Schritt besteht darin, einen regulären Ausdruck zu verwenden, um die Zeichenfolge nach Instanzen von Nominalphrasen zu durchsuchen. Nun lautet die allgemeine linguistische Formel für eine Nominalphrase: ein optionaler Determinator (DT), null oder mehr Adjektive (JJ) und ein Substantiv (NN), Eigenname (NP) oder Pronomen (PRN). Mit dieser allgemeinen Formel habe ich diesen regulären Ausdruck versucht (beachte, dass die markierte Zeichenfolge zwischen Wörtern und Tags wechselt):

%Vor%

Hier ist mein Code:

%Vor%

Und hier ist meine Ausgabe:

%Vor%

Es findet keine Pronomen oder Eigennamen und passt aus irgendeinem Grund nur dem Muster 'NN in a' \ w + DT \ w + NN '. Ich nahm an, dass meine Regex diesen Patersn entsprechen würde, da ich das Determinierermuster a s optional (?) Und das Adjektivmuster null oder mehr (*) gesetzt habe.

Chris

    
user3609038 24.06.2014, 01:13
quelle

2 Antworten

6

Verwenden Sie dies:

%Vor%

Siehe Demo .

  • (?:(?:\w+ DT )?(?:\w+ JJ )*)? entspricht optional dem DT, gefolgt von null oder mehr ajektiven
  • '\ w + (?: N [NP] | PRN)' stimmte mit NN , NP oder PRN überein
zx81 24.06.2014, 01:18
quelle
0

Deine Regex wäre,

%Vor%

DEMO

    
Avinash Raj 24.06.2014 01:34
quelle

Tags und Links