Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Python regex probleempje (was mawk probleem)  (gelezen 871 keer)

Offline BaukeP

  • Lid
Python regex probleempje (was mawk probleem)
« Gepost op: 2014/11/21, 23:00:21 »
Hallo,

Ik moet een aantal ondertitelingsbestanden (.srt) aanpassen en ik probeer dat te doen met mawk.

Onderstaand commande loopt niet en ik weet even niet waarom.

mawk '{gsub("wn","van")}{gsub(/([a-z])N([a-z])/1rv2)}{print $0}' "$1" > ~/tmp/"$filename"

Het gaat om de tweede gsub, waarin ik bv DaaNoor, eNan enzo wil vervangen  door Daarvoor, ervan etc.
Kortom: Iedere hoofdletter N die niet aan het begin van een woord staat, moet vervangen worden door rv

Edit: Voor de duidelijkheid:
Ik probeer de gegevens te groeperen door (). Maar groep 1 en 2 (rond de N) moet ik ook weer terug. Hoe?

Maar ik doe uiteraard (daarom ben ik hier) iets fout. Wie helpt me even?

Alvast mijn hartelijke dank,

Bauke
« Laatst bewerkt op: 2014/12/05, 11:03:02 door BaukeP »

Offline BaukeP

  • Lid
Re: mawk probleempje
« Reactie #1 Gepost op: 2014/11/26, 16:21:56 »
Het schijnt niet te kunnen met mawk.

Dus heb ik een python script gemaakt. Werkt prima.

Bauke

Offline BaukeP

  • Lid
Re: Python regex probleempje (was mawk probleem)
« Reactie #2 Gepost op: 2014/12/05, 11:11:00 »
Zoals ik al schreef, doe ik het nu met python. En dat werkt stukken beter in dit geval.

Wel zit ik nog met het volgende: In het srt bestand staan veel woorden waar een spatie tussen zou moeten staan. Bv waarje, datje gaje, hebjij, denkje etc
met:
line = re.sub(r"(\b[a-z]{2,4})(?=(je|jou|jij)\b)", r"\1 ", line)
worden de meesten opgelost.

Maar er zijn uitzonderingen: bv meisje, beetje, eindje, klusje, lesje. Deze worden ook gesplitst in bv meis je.

Hoe voorkom ik dit? Ik heb [^(eind|beet|stuk)] ertussen gezet, maar dan gaat er weer van alles fout

Alvast weer bedankt

Bauke

Offline BaukeP

  • Lid
Re: Python regex probleempje (was mawk probleem)
« Reactie #3 Gepost op: 2015/01/07, 13:59:59 »
Niemand?

Offline profoX

  • Lid
    • wesley
    • Lionslink
Re: Python regex probleempje (was mawk probleem)
« Reactie #4 Gepost op: 2015/01/07, 14:26:57 »
Dag BaukeP

Ik heb er even naar gekeken voor je.

Je zou gebruik kunnen maken van een negative lookbehind. In Python is er wel een restrictie dat het fixed-width patterns moet bevatten dus als je zowel lijsten met vier letter woorden als drie letter woorden hebt bijvoorbeeld (zoals LESje en BEETje) dan moet je meerdere negative lookbehinds gebruiken en dan werkt het ook.

Wat een negative lookbehind doet is, simpel uitgedrukt: de match annuleren indien hetgeen wat direct voor de lookbehind komt een van de woorden is die in de negative lookbehind gedefinieerd zijn.

Een uitgewerkt voorbeeld volgt. De aanpassing is vetgedrukt:

Citaat
>>> line = "wistje datje het meisje een beetje lief vond? geef haar een ijsje!"
>>> line2 = re.sub(r"(\b[a-z]{2,4})(?<!meis|beet)(?<!ijs)(?=(je|jou|jij)\b)", r"\1 ", line)
>>> line2
'wist je dat je het meisje een beetje lief vond? geef haar een ijsje!'

Succes
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

Offline BaukeP

  • Lid
Re: Python regex probleempje (was mawk probleem)
« Reactie #5 Gepost op: 2015/01/15, 23:21:44 »
ProFox,

Hartelijk dank! Weer wat geleerd.

Bauke