Gegenstück zu re.findall() , bzw. eine Möglichkeit dies zu bedingen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Noranora
User
Beiträge: 62
Registriert: Donnerstag 21. Januar 2016, 12:51

Hallo!
Ich suche in einem Text, in jedem Satz ein Verb. Dies tue ich mittels eines regular Expression.



[Codebox=python file=Unbenannt.py]
liste=[]
for i in text:
v=re.findall(r'(([a-z]*/VBN)|([a-z]*/VB/I))
liste=(v[i)]
[/Codebox]


Soweit so gut! Jetzt gibt es aber Äußerungen in dem Text, die kein Verb beinhalten, wie bspw. "Oh Gott"
Ich möchte nun mittels einer if-Bedingung veranlassen, das in jedem Satz, in dem ken Verb existiert "NAN" in die liste eingetragen wird.

Mein Idee:
[Codebox=python file=Unbenannt.py]
if v not in i:
v="NAN"
[/Codebox]

Dies funktioniert allerdings nicht. Mir werden dann unter print(liste) nur die ersten drei "Einträge" ausgegeben, die dann
N
A
N
sind, da die ersten drei "i" keine Verben beinhalten...


Gibt es vielleicht eine festgelegte Regel, wie man re.findall bedingt??

Danke schon mal!LG
BlackJack

@Noranora: Es wäre nett wenn Du mal *funktionierenden* Quelltext zeigen könntest und nicht irgendwas zusammengeratenes was syntaktisch falsch ist und semantisch teilweise komisch aussieht. Also vielleicht Quelltext den Du tatsächlich ausführst. Sachen die man nachvollziehen kann. Wenn Du `print(liste)` schreibst und da drei Buchstaben untereinander geschrieben werden, dann war `liste` ganz offensichtlich keine Liste.

Du scheinst mir auch immer sehr viel Domänenwissen und Wissen darüber was für Daten Du da hast und welche Module Du benutzt, vorauszusetzen. Versetz Dich mal in die Lage von jemanden der Deine Daten nicht kennt, Dein Fachgebiet nicht kennt, nicht weiss welche Module Du verwendest, und keine Ahnung hat was der gezeigte reguläre Ausdruck mit dem finden von Verben zu tun haben könnte. Das ist dann wahrscheinlich die Lage von den allermeisten die hier diesen Beitrag lesen. Lies ihn unter der Voraussetzung mal selber und überlege was so jemand da wohl von verstehen mag.
Noranora
User
Beiträge: 62
Registriert: Donnerstag 21. Januar 2016, 12:51

Hey! Okay, ich habe das jetzt auch nochmal ein bisschen umgestellt.
ich möchte nun versuchen, falls ein verb in dem Satz ist, dieses einer Liste zuzuteilen, zusammen mit dem Adjektiv. Versucht habe ich das mit der if-Bedingung "if verbs in i" , i ist ein Satz, da ich den Text mit nltk geparst habe und der Text jetzt nicht mehr einem einzelnen String entspricht, sondern ich habe eine Liste, bei der jedes Element einen Satz darstellt.

Code: Alles auswählen


for i in text:
    zaehlvar=len(i)
    zaehlvar2=int(0)
    while zaehlvar2<zaehlvar:
        
        verbs=re.findall(r'([a-z]*/VBN|[a-z]*/VB/I)', str(text)) #die regulären Ausdrücke passen! Da ich die nomen und verben mit nltk bearbeitet habe
        adj=re.findall(r'(\s[a-z]*/NN/I-NP/I-PNP)',str(text)) #findet alle Adjektive ---> aber es gibt nicht in jedem Satz ein Adjektiv!!!
        #zaehlvar2=zaehlvar2+1
        if verbs in i:
            
            list=(adj[zaehlvar2],verbs[zaehlvar2])
        print (list)
        durchzaehlen=durchzaehlen+1



Die regulären Ausdrücke wie schon oben kommentiert passen, ein Verb sieht bei mir wie das folgende Beispiel aus:
vorstellen/VB/I-VP/O

die if-Bedingung zu scheint jedoch keine Wirkung zu haben.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Noranora: hör mal auf, auf der Stringrepräsentation Deiner nltk-Objekte zu arbeiten. Diese Objekte haben alle Attribute, die Du nun mühsam versuchst, wieder mit regulären Ausdrücken zu parsen!
Noranora
User
Beiträge: 62
Registriert: Donnerstag 21. Januar 2016, 12:51

wie meinst du sollte ich das denn machen?
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Noranora: in dem Du anfängst, die Dokumentation zu lesen.
Antworten