Problem Description
Here is the text pattern I have:
05.04.0090
1
erhältlichen Tableau Interfaces
lassen sich zusätzliche GLT-Kontakte
aufschalten. Das System kann
die zwei Szenarien-Modi "Urlaub" und
Abwesenheit" verwalten. Für beide
Modi können bestimmte Parameter
programmiert werden.
Das WAREMA climatronic Bediengerät
kann preisgleich auch
in den Farben "schwarz" oder
"schwarz/silber" geliefert werden.
Liefern und montieren. 882,75 882,75
The above text block has item_code that has this norm to write 05.04.0090
then underneath is count of the item 1 then followed by description of product thenunit price in this case EU 882,75
and at the end total sum that is 882,74
What i want
I want to make key value pairs out of it like dict[{'item_code':'5.04.009','quant':'1','description':'TEXT','unit_price':'882,74','Total_sum':'88,75'}]
I will be using this pattern in spacy at the end to recognize the entities. Any suggestion regarding spacy would be great also
What I have tried?
pat= re.search(r'\d(.*?)\d',text,re.M)
print(pat.group())
Help or suggestion will be appreciated.
The pprint.pprint function is used for output. For an explanation of the regular expression used, please go to RegEx101.
import re
import pprint
data = '''
05.04.0090
1
erhältlichen Tableau Interfaces
lassen sich zusätzliche GLT-Kontakte
aufschalten. Das System kann
die zwei Szenarien-Modi "Urlaub" und
Abwesenheit" verwalten. Für beide
Modi können bestimmte Parameter
programmiert werden.
Das WAREMA climatronic Bediengerät
kann preisgleich auch
in den Farben "schwarz" oder
"schwarz/silber" geliefert werden.
Liefern und montieren. 882,75 882,75
05.04.0091
100
foo bar. 170,42 17042
'''
rx = r'''(?mx)
^
(?P<item_code>\d\d\.\d\d\.\d{4})
\s+
(?P<quantity>\d+)
\s+
(?P<description>\S[\s\S]*?)
[ ]+
(?P<unit_price>\d+(?:,\d\d)?)
[ ]+
(?P<total_sum>\d+(?:,\d\d)?)
$
'''
result = [m.groupdict() for m in re.finditer(rx, data)]
pprint.pprint(result)
Output:
[{'description': 'erhältlichen Tableau Interfaces\n'
'lassen sich zusätzliche GLT-Kontakte\n'
'aufschalten. Das System kann\n'
'\n'
'die zwei Szenarien-Modi "Urlaub" und\n'
'Abwesenheit" verwalten. Für beide\n'
'Modi können bestimmte Parameter\n'
'programmiert werden.\n'
'\n'
'Das WAREMA climatronic Bediengerät\n'
'kann preisgleich auch\n'
'\n'
'in den Farben "schwarz" oder\n'
'"schwarz/silber" geliefert werden.\n'
'Liefern und montieren.',
'item_code': '05.04.0090',
'quantity': '1',
'total_sum': '882,75',
'unit_price': '882,75'},
{'description': 'foo bar.',
'item_code': '05.04.0091',
'quantity': '100',
'total_sum': '17042',
'unit_price': '170,42'}]
Related
This is my current code, I have the message_list (the input) and the book (3686 lines) and need to check if the book contains the message. But the message has gaps, "_", and a gap equals a word. But I don't know how to parse this into my re arguments. I have never worked with re before and that was my try on this.
message_list = ["das", "_", "mir", "_", "_", "_", "vor"]
book = readfile("Book.txt", False)
print(re.search(rf"\^{message_list[0]}\.\${message_list[len(message_list)-1]}", str(book)))
Book (Alice in Wonderland in German):
So fingen sie denn an, feierlich im Kreise um Alice zu tanzen; zuweilen
traten sie ihr auf die Füße, wenn sie ihr zu nahe kamen; die falsche
Schildkröte sang dazu, sehr langsam und traurig, Folgendes: --
Zu der Schnecke sprach ein Weißfisch: »Kannst du denn nicht
schneller gehn?
Siehst du denn nicht die Schildkröten und die Hummer
alle stehn?
Hinter uns da kommt ein Meerschwein, und es tritt mir auf
den Schwanz;
Und sie warten an dem Strande, daß wir kommen zu
dem Tanz.
Willst du denn nicht, willst du denn nicht, willst du kommen
zu dem Tanz?
Willst du denn nicht, willst du denn nicht, willst du kommen
zu dem Tanz?«
»Nein, du kannst es nicht ermessen, wie so herrlich es wird sein,
Nehmen sie uns mit den Hummern, werfen uns in's Meer hinein!«
Doch die Schnecke thät nicht trauen. »Das gefällt mir doch nicht ganz!
Viel zu weit, zu weit! ich danke -- gehe nicht mit euch zum Tanz!
Nein, ich kann, ich mag, ich will nicht, kann nicht kommen zu dem Tanz!
Nein, ich kann, ich mag, ich will nicht, mag nicht kommen zu dem Tanz!«
Und der Weißfisch sprach dagegen: »'s kommt ja nicht drauf an, wie
weit!
Ist doch wohl ein andres Ufer, drüben auf der andern Seit'!
Und noch viele schöne Küsten giebt es außer Engelland's;
Nur nicht blöde, liebe Schnecke, komm' geschwind mit mir zum Tanz!
Willst du denn nicht, willst du denn nicht, willst du kommen zu dem
Tanz?
Willst du denn nicht, willst du denn nicht, willst nicht kommen zu dem
Tanz?«
Excpected Output:
["das","_","mir","_","_","_","vor"]
Line 127 : ...
Line 256 : ...
and so on.
If the underscores can represent one word, then you can change them from underscores into a "single word match", which you can then make optional or multiple as required, in constructing a regular expression to match against the text. You just have to be careful about spaces, since there's normally a single space between words but the pattern also captures spaces, so * can be useful, as below:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
book = """icht, kann nicht kommen zu dem Tanz!
Nehmen sie uns mit den Hummern, werfen uns in's Meer hinein!«
Doch die Schnecke thät nicht trauen. »Das gefällt mir doch nicht ganz!
Viel zu weit, zu weit! ich danke -- gehe nicht mit euch zum Tanz!
foo das foo mir bar one two vor foo
Nein, ich kann, ich mag, ich will nicht, kann nicht kommen
Nein, ich kann, ich mag, ich will nicht, mag nicht kommen zu dem Tanz!«~"""
def word_capture_or_literal(w): # _ matches a single word
return '(?:\s+\S+)' if w == "_" else " *" + w
message_list = ["das","_","mir","_","_","_","vor"]
pattern = "".join(map(word_capture_or_literal, message_list))
result = re.search(pattern, book)
print(result)
Result, finding the words ok:
% python foo.py
<_sre.SRE_Match object at 0x10cd73b28>
I want to delete all quotes in dataframe before saving it to csv file. I don't know why I didn't succeed. this is my code:
import re
import pandas as pd
import numpy as np
df = pd.read_table("data.txt")
df["hashtags"] = df["tweet"].str.findall(r"#(\w+)")
df["mentions"] = df["tweet"].str.findall(r"#(\w+)")
replacements = {
"tweet": {
r"#(\w+)": "",
r"#": "",
r"#": "",
r"-": "",
r'"': '',# this is for quotes
}
}
df.replace(replacements, regex=True, inplace=True)
df.to_csv("out.txt", index=False)
print(df)
this an example of the output from the text file. I noticed that quotes are being added not deleted, like for example the quotes in "['Zeynep', 'Orkan', 'Sturm']". Does anyone has an idea what is going on?
this is a sample of the out.txt
"Für viele wäre es ein Alptraum – für Höhlenforscher ist es nichts ganz Ungewöhnliches, in einer Höhle festzusitzen. Für drei Experten aus Polen wird die Lamprechtshöhle in Österreich zur Falle. Fachleute sehen sie nicht in ernster Gefahr. ",[],[]
"Das wird ein teurer Ausflug mit dem Gefährt, das eigentlich nur 25 km/h schnell sein darf. ",[],[]
Beim Atletico Madrids Niederlage gegen Levante krachte Gegenspieler Duarte auf Cunha drauf. Der Brasilianer muss mit Bänderdehnung einige Wochen aussetzen. ,[],[]
"Das Spektrum der Vorschläge ist breit, eine Impfpflicht ohne Wenn und Aber wird nur in einer der fünf Vorlagen befürwortet. ",['Impfpflicht'],[]
Der Verteidiger fällt beim Härtespiel am Sonntag gegen RB Leipzig aus. Für ihn muss wieder Youngster Linus Gechter ran. hertha BSCRBL ,"['hertha', 'BSCRBL']",[]
"Eigentlich wollte RTL die Fans noch raten lassen, doch ein Foto auf der StreamingPlattform RTL+ verrät bereits alle Gesichter. CoupleChallenge ",['CoupleChallenge'],[]
"Er gehörte zu der Mannschaft, die 2019 sensationell die Klasse in der 3. Liga hielt. Jetzt stellt er sich einer neuen Herausforderung. CoupleChallenge ",['CoupleChallenge'],[]
"Kaum eine Atempause, schon wütet der nächste Wintersturm. Zeynep ",['Zeynep'],[]
Eigentlich tritt Florian Silbereisen sehr regelmäßig in der ARD auf. Doch jetzt macht er lange Pause. ,[],[]
Berliner Frisöre wollen endlich wieder allen die Haare schneiden – Schwarzarbeit ist die Alternative ,[],[]
"Als erste Charge erwartet die Bundesregierung 1,4 Millionen Dosen. Novavax ",['Novavax'],[]
"Laut einem Bericht soll das von Ischinger gegründete Unternehmen Agora versucht haben, auf der Konferenz Waffendeals zu vermitteln. ",['Agora'],[]
"USBeamter des Weißen Hauses behauptet, der Kreml habe in den vergangenen Tagen seine Truppenpräsenz um „bis zu 7000“ Soldaten aufgestockt. Ukraine ",['Ukraine'],[]
Die Polizei überprüfte mehrere Verdächtige. ,[],[]
Der Einzelhandel erwartet trotz Wegfalls der 2GRegel „keinen Ansturm“ auf Geschäfte. ,[],[]
"Stufenweise und vorsichtige Rücknahme der Infektionsschutzmaßnahmen gefordert, Fallzahlen können auch wieder steigen. RKI ",['RKI'],[]
Angriffe auf Medienvertreter haben in der CoronaPandemie zugenommen. ,[],[]
"De Sturm wird eine Spur der Verwüstung von Großbritannien bis zur Nordsee ziehen, warnen Experten! Zeynep Orkan Sturm ","['Zeynep', 'Orkan', 'Sturm']",[]
this is a sample of the data.txt
Hier arbeiten Deutsche, Russen und Ukrainer Hand in Hand. Die Firma UniferX aus dem Ostseebad #Nienhagen exportiert seit 20 Jahren Spezialdünger nach Osteuropa. Sie stellt sich auf massive Einschnitte durch die aktuelle #Russland-#Ukraine-Krise ein.
Nach 14 Jahren auf der Werft wechselt Eric Dörffel den Job und macht sein Hobby zum Beruf. Der #Wismar|er möchte Kinder für den Sport begeistern.
Ist ein Unglück auf der #Ostsee vor #Nienhagen passiert? Diese Vermutung hatte ein Spaziergänger, als er am Mittwoch einen Rettungsring an den Buhnen treiben sah. Die Einsatzkräfte suchten das Gebiet ab.
Drei Jahre lang wurde #NordStream2 für mehr als zehn Milliarden Euro gebaut. Ob durch die Doppelröhre jemals auch nur ein Kubikmeter Gas von #Russland nach Deutschland gelangen wird, ist nun sehr fraglich. Fragen und Antworten im Überblick,
Die Ruinen auf dem ehemaligen Militärgelände im Ostseebad #Boltenhagen sind verschwunden, aber auch etliche Bäume. Das ärgert Anwohner der Baustelle, auf der ein Hotel entstehen wird.
Bis zum 22. Februar konnten alle Fraktionen der #Stralsund|er Bürgerschaft ihre Kandidaten für die Wahl des neuen Oberbürgermeisters nominieren. Bleibt es bei den bisher bekannten Namen auf dem Wahlzettel?
Am Dienstag hatte Bundeskanzler Olaf #Scholz den Stopp des Genehmigungsverfahrens für die Gaspipeline #NordStream2 verkündet. Nun will die #Klimastiftung #MecklenburgVorpommern die Unterstützung der Pipeline einstellen.
Ein knappes halbes Jahr nach dem Rauswurf von Vorstandschef Christian Schmidt werden die Vorgänge an der Rostocker Uni-Klinik nun zu einem Fall für den Landtag. Die Jamaika-Opposition hat einen Untersuchungsausschuss beantragt.
#nazihunter_161 Was genau haben wir denn falsch recherchiert?
In a Comma-Separated Values—a.k.a. CSV—file, commas are used to delimit values.
If a value contains a comma itself, it must be quoted for the comma to be interpreted unambiguously.
The quotes are added by the CSV writer as needed for the output to be valid CSV. There's nothing to remove.
Try turning off quoting with quoting=csv.QUOTE_NONE:
df.to_csv('out.txt', index=False, quoting=csv.QUOTE_NONE, escapechar='\\')
A line from the resulting file:
tweet,hashtags,mentions
Hier arbeiten Deutsche\, Russen und Ukrainer Hand in Hand. Die Firma UniferX aus dem Ostseebad Nienhagen exportiert seit 20 Jahren Spezialdünger nach Osteuropa. Sie stellt sich auf massive Einschnitte durch die aktuelle RusslandUkraineKrise ein.,[Nienhagen\, Russland\, Ukraine],[]
Note that since you're using commas to separate the cells, it escapes commas that are already inside cells (thus the backslash before some commas, e.g. \,)
I have problems reading a text file textFile1 with the following content:
Das erste Mal war noch in der Audition-Phase bei einem Screentest.
Sie haben mir das alte Kostüm von einem meiner Vorgänger, Val Kilmer, gegeben.
Es war verrückt.
Ich weiss noch genau, wie ich es mir angezogen habe und dachte, Batman zu spielen wird hier drinnen unmöglich sein für mich, völlig ausgeschlossen!
from pathlip import Path
p = Path('textFile1')
p.read_text()
The language is German and some of the characters are not displayed correctly:
'Das erste Mal war noch in der Audition-Phase bei einem Screentest.\nSie haben mir das alte Kostüm von einem meiner Vorgänger, Val Kilmer, gegeben.\nEs war verrückt.\nIch weiss noch genau, wie ich es mir angezogen habe und dachte, Batman zu spielen wird hier drinnen unmöglich sein für mich, völlig ausgeschlossen!\n'
I came across this problem on another occasion when I tried to import a table into postgreSQL. A workaround was to enter the following from the command line:
chcp 1252
psql -U postgres
SET client_encoding='WIN1252'
\i Path/to/your/.sqlFile
I am working on a Windows machine (Windows 10 Enterprise). Is there a way to solve the problem without changing the client_encoding every time I read text files from the command line? I have done quit a lot of research on this topic but I couldn't find a way to change the settings permanently. It seems to be a "Windows problem", because on my Mac all the characters are displayed correctly.
p.read_text(encoding='UTF-8' )
I have some large German text files (that I can split into smaller text files, so that's not a problem) from which I want to extract the words and later count how many times a each word appears (the latter is also not a problem).
The texts are pretty messy:
'''Alan Smithee''' steht als [[Pseudonym]] für einen fiktiven Regisseur, der Filme verantwortet, bei denen der eigentliche [[Regisseur]] seinen Namen nicht mit dem Werk in Verbindung gebracht haben möchte. Von 1968 bis 2000 wurde es von der [[Directors Guild of America]] (DGA) für solche Situationen empfohlen, seither ist es '''Thomas Lee'''.<ref>[[Los Angeles Times|latimes]].com: [http://articles.latimes.com/2000/jan/15/entertainment/ca-54271 ''Name of Director Smithee Isn't What It Used to Be''], zuletzt geprüft am 2. April 2011.</ref> ''Alan Smithee'' ist jedoch weiterhin in Gebrauch.
Alternative Schreibweisen sind unter anderem die Ursprungsvariante ''Al'''len''' Smithee'' sowie ''Alan Sm'''y'''thee'' und ''A'''dam''' Smithee''. Auch zwei teilweise asiatisch anmutende Schreibweisen ''Alan Smi Thee'' und ''Sumishii Aran'' gehören – so die [[Internet Movie Database]] – dazu.<ref name="IMDb">[http://www.imdb.com/name/nm0000647/ Eigener Eintrag für ''Alan Smithee'' in der IMDb]</ref>
== Geschichte ==
=== Entstehung ===
Das Pseudonym entstand 1968 infolge der Arbeiten am Western-Film ''Death of a Gunfighter'' (deutscher Titel ''[[Frank Patch – Deine Stunden sind gezählt]]''). Regisseur [[Robert Totten]] und Hauptdarsteller [[Richard Widmark]] gerieten in einen Streit, woraufhin [[Don Siegel]] als neuer Regisseur eingesetzt wurde.
Der Film trug nach Abschluss der Arbeiten noch deutlich Tottens [[Manier (Stil)|Handschrift]], der auch mehr Drehtage als Siegel daran gearbeitet hatte, weshalb dieser die Nennung seines Namens als Regisseur ablehnte. Totten selbst lehnte aber ebenfalls ab. Als Lösung wurde ''Allen Smithee'' als ein möglichst einzigartiger Name gewählt.<ref>[http://www.imdb.com/name/nm0000647/bio ''Biography for Alan Smithee''] in der Internet Movie Database</ref>
In den zeitgenössischen Kritiken wurde der Regisseur u. a. von [[Roger Ebert]] mit den Worten gelobt:
{{Zitat
|Text=Director Allen Smithee, a name I’m not familiar with, allows his story to unfold naturally. He never preaches, and he never lingers on the obvious. His characters do what they have to do.<ref>rogerebert.[[Chicago Sun-Times|suntimes]].com: [https://www.rogerebert.com/reviews/death-of-a-gunfighter-1969 ''Death of a Gunfighter''], zuletzt geprüft am 2. April 2011</ref>
|Sprache=en
|Übersetzung=Regisseur Alan Smithee, ein Name, der mir nicht vertraut ist, erlaubt es seiner Handlung, sich natürlich zu entfalten. Er predigt niemals, und er verweilt nie beim Offensichtlichen. Seine Charaktere tun, was sie tun müssen.}}
=== Aufdeckung und Abkehr ===
1997 kam die Parodie ''An Alan Smithee Film: Burn Hollywood Burn'' (deutscher Titel ''[[Fahr zur Hölle Hollywood]]'') in die Kinos, was das Pseudonym einem größeren Publikum bekannt machte, nicht zuletzt weil [[Arthur Hiller (Regisseur)|Arthur Hiller]], der eigentliche Regisseur des Films, selbst seinen Namen zurückzog und analog zum Filmtitel das Pseudonym ''Alan Smithee'' benutzte. Der Film gilt als einer der schlechtesten Filme der 1990er Jahre und gewann fünf [[Goldene Himbeere]]n.
Der Film ''[[Supernova (2000)|Supernova]]'' ist der erste Post-Smithee-Film, dort führte ein gewisser ''Thomas Lee'' alias [[Walter Hill]] die Regie.
<!-- fand nur einen für den von 1990, siehe ''[[Das Kindermädchen]]'':
„Smithee wurde allerdings auch nach ''Supernova'' gesichtet, in einem Film namens ''The Guardian''.“
-->
== Verwendung ==
Die Verwendung dieses oder eines anderen Pseudonyms ist für Mitglieder der DGA streng reglementiert. Ein Regisseur, der für einen von ihm gedrehten Film seinen Namen nicht hergeben möchte, hat nach Sichtung des fertigen Films drei Tage Zeit, anzuzeigen, dass er ein Pseudonym verwenden möchte. Der Rat der DGA entscheidet binnen zwei Tagen über das Anliegen. Erhebt die Produktionsfirma Einspruch, entscheidet ein Komitee aus Mitgliedern der DGA und der Vereinigung der Film- und Fernsehproduzenten, ob der Regisseur ein Pseudonym angeben darf. Über die Beantragung muss der Regisseur Stillschweigen halten, ebenso darf er den fertigen Film nicht öffentlich kritisieren, wenn die DGA ihm die Verwendung eines Pseudonyms zugesteht.<ref>Siehe zu diesen Regelungen [http://www.dga.org/~/media/Files/Contracts/Agreements/2008%20BA/008ba2008article8.pdf Artikel 8, Abschnitt 8-211 des ''Basic Agreement''] (PDF; 125 kB) der DGA von 2008, abgerufen am 25. April 2012.</ref> Ein Antrag des Regisseurs auf Pseudonymisierung kann abgelehnt werden, so durfte [[Tony Kaye (Regisseur)|Tony Kaye]] den Namen Smithee bei dem Film ''[[American History X]]'' nicht einsetzen, obwohl er den Antrag stellte.
Auch bei nicht-US-amerikanischen Produktionen wird der Name verwendet, wie etwa beim [[Pilotfilm]] der Fernsehserie ''[[Schulmädchen (Fernsehserie)|Schulmädchen]]''. 2007 sendete die ARD am 8. und 9. August den zweiteiligen TV-Film ''Paparazzo''. Auch in diesem Werk erscheint anstatt des eigentlichen Regisseurs [[Stephan Wagner (Regisseur)|Stephan Wagner]] Alan Smithee im Abspann.
Regisseure, die das Pseudonym benutzt haben:
* [[Don Siegel]] und [[Robert Totten]] (für ''[[Frank Patch – Deine Stunden sind gezählt]]'')
* [[David Lynch]] (für die dreistündige Fernsehfassung von ''[[Der Wüstenplanet (Film)|Der Wüstenplanet]]'')
* [[Chris Christensen]] (''The Omega Imperative'')
* [[Gianni Bozzacchi]] (für ''I Love N.Y.'')
* [[Stuart Rosenberg]] (für ''Let’s Get Harry'')
* [[Richard C. Sarafian]] (für ''[[Starfire]]'')
* [[Dennis Hopper]] (für ''[[Catchfire]]'')
* [[Arthur Hiller (Regisseur)|Arthur Hiller]] (für ''[[Fahr zur Hölle Hollywood]]'')
* [[Rick Rosenthal]] (''Die Vögel II – Die Rückkehr'')
* [[Kevin Yagher]] (''[[Hellraiser IV – Bloodline]]'')
* [[William Lustig]] (''[[Maniac Cop 3]]'')
I wrote the following code:
import re
with open('C:\\path\\text.txt', encoding="unicode_escape") as f, open('word_list.txt', 'a', encoding="utf-8") as f1:
f1.write('\n'.join(set(re.findall("[a-zA-Z_äöüÄÖÜß]+", f.read()))))
A text editor says I have 741 words, but the output only has approximately 460 words. The output looks like this (this is just a snippet) and it also contains single letters or groups of letters that don't make sense:
Hill
Himbeere
An
never
gepr
Frank
X
Eigener
Thee
Auch
anstatt
com
mehr
fiktiven
Should I use something else? Should I alter anything in my code? Is there a better way to filter such a messy text?
It looks like your code is working correctly. Note that a set only keeps unique element, so that might be the reason for your lower wordcount.
In texts like these you will find many proper names and metadata words. In this one there is even a section where names are separated into syllables, which gives you some nonsensical results.
Depending on what you plan on doing with the data, it might be worth considering to get a dictionary of german words and discard any results that don't appear in the dictionary. There are some nice word lists in this answer from the german stackexchange.
If you only want to work with wikipedia articles, you can use the wikipedia module. It imports the articles without the markdown information that is making you problems at the moment.
import wikipedia
page = wikipedia.page('Stack Overflow')
raw_text = page.content
Furthermore I would recommend you the Stutgart Tübingen Tagset which is used in the spacy module for instance.
I am calling this perl script from http://www.linguistics.ruhr-uni-bochum.de/~dipper/software/tokenize.perl where given an input file, it gives outputs a file in another format.
But when the perl script gives a shell error through python's os.system(), how can I catch the error? Is there a way to do try-except to catch the error from shell when i call a unix command from os.system()?
def rb_tokenize(text):
os.system("echo '''"+text+"'''> tmp.in")
os.system("perl rbtokenize.pl tmp.in tmp.out")
return " ".join([i.strip() for i in codecs.open("tmp.out","r","utf8").readlines()])
sentence1 = """Ich bin schwanger."""
sentence2 = """Herr Präsident! Ich freue mich, in der Aussprache über diesen Bericht das Wort zu ergreifen und Frau Theato zu beglückwünschen. Ich halte dies für einen Bericht, bei dem die Zusammenarbeit zwischen den Ausschüssen sehr gut funktioniert hat, und das Ergebnis, das uns heute vorliegt, ist ein nüchterner, sachlicher Bericht auf einem besonders delikaten Gebiet. Nüchternheit und Sachlichkeit, die folglich bei der Entwicklung des Artikels 280.4 besonders notwendig sind. Denn wenn wir einen Preis für den Artikel vergeben müßten, der am schwersten verständlich, am wenigsten eindeutig, am unklarsten ist - wie Sie es auch bezeichnen wollen -, dann gäbe es sicher einen harten Wettstreit, weil der Vertrag eine Musterkollektion von komplizierten Artikeln ist, aber dieser ist ohne Zweifel einer der aussichtsreichsten Anwärter auf diesen Preis. Gleichzeitig ist es eine besonders delikate Frage, weil sie den Schutz der finanziellen Interessen der Gemeinschaft betrifft, wie Frau Theato sehr richtig gesagt hat. Wir sind uns alle der Notwendigkeit bewußt - und dieses Parlament hat diese Sorge aufgeworfen bzw. ist ein großer Vorkämpfer in dieser Sache gewesen -, die finanziellen Interessen der Gemeinschaft zu schützen. Aber Vorsicht, wie die Franzosen sagen, "ne jettons pas le bébé avec l'eau du bain ", man darf das Kind nicht mit dem Bade ausschütten, das heißt, beim Schutz der finanziellen Interessen der Gemeinschaft sind einerseits - und Frau Theato hat es gesagt - die Zuständigkeiten der Nationalstaaten zu respektieren, aber auch andere Dinge, die die Bürger angehen, die die wesentlichen Garantien betreffen. Durch die Schlußfolgerungen des Berichts Theato werden sie uneingeschränkt bewahrt. Deshalb hoffe ich in meiner Eigenschaft als Vorsitzende des Ausschusses für Recht und Binnenmarkt und selbstverständlich auch in meiner Eigenschaft als Abgeordnete, daß dieses Parlament morgen mit einer breiten Mehrheit den Bericht unterstützt und daß er durch die Kommission eine gute Umsetzung erfährt."""
# This gives a correct string output.
rb_tokenize(sentence1)
# Wrong output
# The perl script gives an error and the new tmp.out
# isn't updated and it gives the output from sentence1
rb_tokenize(sentence2)
The second sentence would have got the error following error at os.ystem():
sh: 1: Syntax error: Unterminated quoted string
I've tried:
def rb_tokenize(text):
os.system("echo '''"+text+"'''> tmp.in")
noerror = os.system("perl rbtokenize.pl tmp.in tmp.out")
print noerror
return " ".join([i.strip() for i in codecs.open("tmp.out","r","utf8").readlines()])
rb_tokenize(sentence2)
but noerrror == 0 although it gives the sh: 1: Syntax error: Unterminated quoted string error.
After some tries, i realize that the following echo command don't even work on the unix terminal:
echo """Herr Präsident! Ich freue mich, in der Aussprache über diesen Bericht das Wort zu ergreifen und Frau Theato zu beglückwünschen. Ich halte dies für einen Bericht, bei dem die Zusammenarbeit zwischen den Ausschüssen sehr gut funktioniert hat, und das Ergebnis, das uns heute vorliegt, ist ein nüchterner, sachlicher Bericht auf einem besonders delikaten Gebiet. Nüchternheit und Sachlichkeit, die folglich bei der Entwicklung des Artikels 280.4 besonders notwendig sind. Denn wenn wir einen Preis für den Artikel vergeben müßten, der am schwersten verständlich, am wenigsten eindeutig, am unklarsten ist - wie Sie es auch bezeichnen wollen -, dann gäbe es sicher einen harten Wettstreit, weil der Vertrag eine Musterkollektion von komplizierten Artikeln ist, aber dieser ist ohne Zweifel einer der aussichtsreichsten Anwärter auf diesen Preis. Gleichzeitig ist es eine besonders delikate Frage, weil sie den Schutz der finanziellen Interessen der Gemeinschaft betrifft, wie Frau Theato sehr richtig gesagt hat. Wir sind uns alle der Notwendigkeit bewußt - und dieses Parlament hat diese Sorge aufgeworfen bzw. ist ein großer Vorkämpfer in dieser Sache gewesen -, die finanziellen Interessen der Gemeinschaft zu schützen. Aber Vorsicht, wie die Franzosen sagen, "ne jettons pas le bébé avec l'eau du bain ", man darf das Kind nicht mit dem Bade ausschütten, das heißt, beim Schutz der finanziellen Interessen der Gemeinschaft sind einerseits - und Frau Theato hat es gesagt - die Zuständigkeiten der Nationalstaaten zu respektieren, aber auch andere Dinge, die die Bürger angehen, die die wesentlichen Garantien betreffen. Durch die Schlußfolgerungen des Berichts Theato werden sie uneingeschränkt bewahrt. Deshalb hoffe ich in meiner Eigenschaft als Vorsitzende des Ausschusses für Recht und Binnenmarkt und selbstverständlich auch in meiner Eigenschaft als Abgeordnete, daß dieses Parlament morgen mit einer breiten Mehrheit den Bericht unterstützt und daß er durch die Kommission eine gute Umsetzung erfährt."""
A call to os.system("your command") returns a unix status code.
code = os.system("your command")
if code == 0:
print "Success! :)"
else:
print "Fail! :("
Edit: os.system is a bit old and out of date and it's recommended that you use the subprocess module instead. See http://docs.python.org/2/library/subprocess.html#module-subprocess
bash doesn't play nice with Germen encoding out of the box. Try something like
fil = open('path/to/file.txt','w')
fil.write(text)
fil.close()
code = os.system("perl rbtokenize.pl path/to/file.txt tmp.out")
if code == 0:
return ... #Success
# Failed
raise SomethingSensible