Fischer-Bayern.de
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Wortfolgen trennen/aufteilen

 
Neues Thema eröffnen   Neue Antwort erstellen    Fischer-Bayern.de Foren-Übersicht -> AppleScript X
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Wolle-77
•--->
•--->


Anmeldedatum: 25.02.2003
Beiträge: 447
Wohnort: Geldern

BeitragVerfasst am: 05.12.2011 - 22:56    Titel: Wortfolgen trennen/aufteilen Antworten mit Zitat

Hallo,

stehe gerade ein wenig auf dem Schlauch und lasse einfach mal parallel mitdenken bzw. biete es an ;-)

Es geht darum, Wortfolgen bei Vorkommnissen von diesen Zeichen aufzuteilen: ". ", ", ", "; ", ": "; also bestimmten Satzzeichen mit Wortzwischenräumen.
Ich bekomme in einem Script eine Wortfolge (string) und eine Liste (list) mit den betroffenen Wörtern geliefert (hier nur als Beispiel in einem record zusammengefaßt):

Code:
{{"Verlustreduzierung.Hallo, Nochnwort ", {2, 3}}, {"TecDax, DAXI ", {3, 4}}, {"einer, dieser aber auch. ", {20, 21, 22, 23}}, {"Satz mit X, aber y läuft ", {35, 36, 37, 38, 39, 40}}}


Die Liste betroffeneswort enthält immer soviel Einträge bzw. ist immer passend zur wortfolge (enthält also im letzten Beispiel 6 Einträge, da es sich um 6 Wörter handelt).
Die Liste enthält die Angaben der Wörter eines Absatzes, daher sind die Werte immer zusammenhängend.

Die grundsätzliche Aufteilung wurde also bereits vorgenommen, aber sobald bzw. sofern diese Kombination erhalten ist, brauche ich eine Unteraufteilung, als Beispiel "Verlustreduzierung.Hallo, " -> 2, "Nochnwort" -> 3 oder "Satz mit X, " -> 35 und "aber y läuft " -> 38

Also immer die Werte des ersten Wortes.

Die grundsätzliche Feststellung, ob eine solche Kombination überhaupt enthalten ist, lasse ich perl erledigen:

Code:
if (run script (do shell script "perl -nle 'if (/[\\.,;:] .+/i) {print \"true\"} else {print \"false\"}' <<< " & (quoted form of wortfolge))) then


Das ist denke ich am effektivsten; so kann ich so später den regulären Ausdruck nach Belieben erweitern/ändern.

Wie würdet Ihr nun die Abfrage lösen? Es können ja beliebige Kombinationen aus mehrfach auftauchen, z. B. "Wort1, Wort2. Wort3 und Wort4, Wort5". Ergibt dann 4 Einträge.

Rekursiver Aufruf? Vielen Dank für Hinweise und ich hoffe, es ist verständlich …
_________________
Martin Wolter
--
Apple rocks the planet!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 06.12.2011 - 18:32    Titel: Antworten mit Zitat

Ich habe das jetzt 2 Mal gelesen und verstehe immer noch Bahnhof.

Frage: Wenn Du schon perl verwendest, warum machst Du dann nicht gleich alles darin?
_________________
"All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies")
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Wolle-77
•--->
•--->


Anmeldedatum: 25.02.2003
Beiträge: 447
Wohnort: Geldern

BeitragVerfasst am: 06.12.2011 - 18:41    Titel: Antworten mit Zitat

Hallo Skeeve,

danke für eine Antwort. Ok, wenn Du es schon nicht verstehst ...

Hier, laß das Beispiel mal laufen:

Code:
set wortfolgetest to {{"Verlustreduzierung.Hallo, Nochnwort ", {2, 3}}, {"Hallo Vier", {7, 8}}, {"TecDax, DAXI ", {3, 4}}, {"einer, dieser aber auch. ", {20, 21, 22, 23}}, {"Satz mit X, aber y läuft ", {35, 36, 37, 38, 39, 40}}}
set wortfolgetestneu to {}

repeat with i from 1 to count items of wortfolgetest
   set {wortfolge, betroffeneswort} to item i of wortfolgetest
   if (run script (do shell script "perl -nle 'if (/[\\.,;:] .+/i) {print \"true\"} else {print \"false\"}' <<< " & (quoted form of wortfolge))) then
      log wortfolge
      log betroffeneswort
   end if
end repeat


Das zweite Beispiel gibt ein false zurück, alle anderen müßten aufgeteilt werden. Warum ich nicht weiter in perl mache? Weil ich da nicht weiß, wie man die Zahllisten aufgeteilt bekommt. Hingegen die grundsätzliche Feststellung wäre ja superkompliziert; da muß eine Regex her.

Was herauskommen muß/soll, habe ich ja beschrieben. Ein neues Beispiel wäre:

"Guten Abend. Es ist Dienstag", {1, 2, 3, 4} ((Die Zahlenwerte selbst sind völlig egal))

wird zu

"Guten Abend. ", "Es ist Dienstag", {1, 2}, {3, 4}

So, daß ich dann die beiden Teilstücke habe und passend dazu weiß, daß es sich um das 1. und 3. Wort als Beginn handelt.
_________________
Martin Wolter
--
Apple rocks the planet!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 06.12.2011 - 21:50    Titel: Antworten mit Zitat

Habe ich das richtig verstanden?

Das hier zerlegt den ganzen Text (446 Wörter) in "(Teil-)Sätz" und schreibt vor jeden Satz die laufende Nummer des ersten Wortes des Satzes.

Code:

property lipsum : "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc nulla lorem, imperdiet ac adipiscing semper, rhoncus quis magna. Nam sollicitudin convallis lorem at mattis. Etiam placerat, leo id rhoncus eleifend, mauris enim pellentesque urna, convallis congue enim dui et lectus. Curabitur sed dui enim, eu porta urna. Cras at mi sed nisl porta sollicitudin. Cras lectus quam, bibendum quis ultricies non, vestibulum in orci. Maecenas eros dolor, blandit et hendrerit vitae, pretium vel massa.

Praesent tincidunt dapibus lectus non consectetur. Proin nulla magna, aliquet in vehicula in, vehicula quis felis. Maecenas sodales rutrum vulputate. Praesent semper hendrerit tempor. Cras nec dolor eu ipsum tempus rutrum. Aenean nec ipsum eu orci posuere rhoncus. Aliquam erat volutpat. Morbi porttitor sagittis massa non fringilla.

Vivamus nisi orci, porttitor sit amet tincidunt vel, tempor a ipsum. Maecenas tincidunt dapibus tempus. Sed bibendum condimentum dignissim. Praesent libero nisl, imperdiet eu adipiscing eu, ornare eget mi. Donec euismod consectetur dui quis posuere. Donec tristique orci vitae leo convallis pretium. Aenean eu massa massa, vel aliquam nulla. Ut et magna in odio convallis egestas. Suspendisse vulputate risus nec elit tincidunt ullamcorper. Cras ipsum mauris, ultrices quis scelerisque rutrum, rutrum vitae odio. Phasellus mollis ultrices risus ac pellentesque. Donec commodo hendrerit tempus. Cras tempor, lectus at consequat porttitor, quam sem tempor ante, non blandit magna mi malesuada ipsum. Nulla facilisi.

Cras sit amet quam vel urna tincidunt porta vel id risus. Praesent porta malesuada felis, at aliquam lorem lacinia et. Maecenas tristique blandit nulla at ultrices. Aenean imperdiet, mi suscipit tristique viverra, odio purus sagittis leo, ut facilisis leo risus quis massa. Nam in fringilla nisi. Morbi at massa quis tellus scelerisque dapibus. Morbi pellentesque ornare nunc, nec facilisis ligula ultricies ut. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla facilisi. Nam sagittis, lorem in fringilla vulputate, diam odio molestie neque, et congue odio dui sit amet eros. Etiam eu elit vitae eros lacinia ornare. Phasellus euismod eleifend pharetra. Aenean ac dui nulla, a interdum est. Donec lectus nisi, sagittis id auctor vel, facilisis ac nulla. Fusce ut arcu vel ante semper pharetra.

Donec ac varius mauris. Vivamus volutpat sagittis enim, ut tempus neque accumsan sit amet. Fusce sit amet nibh velit. Nam pellentesque mauris vestibulum lacus bibendum iaculis. Donec tempus, risus sit amet accumsan pulvinar, diam nunc tristique metus, sit amet euismod purus erat vitae diam. Fusce quis elit augue, quis suscipit sapien. Pellentesque ultrices sodales aliquet. Aliquam nec velit a mi rutrum eleifend. Nam id enim ac eros consectetur porttitor non eu mi. Maecenas bibendum justo eget felis vehicula convallis. Donec accumsan ipsum eget nunc euismod lobortis. Curabitur fringilla lorem non felis adipiscing id feugiat est fermentum.

"

on run
   do shell script "perl -e " & (quoted form of "
      my $text= shift;
      $text=~ s/\\n/ /g;
      my @sentences= split /(?<=[.,:;])\\s+/, $text;
      my $wc=1;
      foreach my $sentence (@sentences) {
         print $wc,': ',$sentence,$/;
         $wc+= scalar split ' ',$sentence;
      }
   ") & " " & quoted form of lipsum
end run


Ergebnis:
Code:
1: Lorem ipsum dolor sit amet,
6: consectetur adipiscing elit.
9: Nunc nulla lorem,
12: imperdiet ac adipiscing semper,
16: rhoncus quis magna.
19: Nam sollicitudin convallis lorem at mattis.
25: Etiam placerat,
27: leo id rhoncus eleifend,
31: mauris enim pellentesque urna,
35: convallis congue enim dui et lectus.
41: Curabitur sed dui enim,
45: eu porta urna.
48: Cras at mi sed nisl porta sollicitudin.
55: Cras lectus quam,
58: bibendum quis ultricies non,
62: vestibulum in orci.
65: Maecenas eros dolor,
68: blandit et hendrerit vitae,
72: pretium vel massa.
75: Praesent tincidunt dapibus lectus non consectetur.
81: Proin nulla magna,
84: aliquet in vehicula in,
88: vehicula quis felis.
91: Maecenas sodales rutrum vulputate.
95: Praesent semper hendrerit tempor.
99: Cras nec dolor eu ipsum tempus rutrum.
106: Aenean nec ipsum eu orci posuere rhoncus.
113: Aliquam erat volutpat.
116: Morbi porttitor sagittis massa non fringilla.
122: Vivamus nisi orci,
125: porttitor sit amet tincidunt vel,
130: tempor a ipsum.
133: Maecenas tincidunt dapibus tempus.
137: Sed bibendum condimentum dignissim.
141: Praesent libero nisl,
144: imperdiet eu adipiscing eu,
148: ornare eget mi.
151: Donec euismod consectetur dui quis posuere.
157: Donec tristique orci vitae leo convallis pretium.
164: Aenean eu massa massa,
168: vel aliquam nulla.
171: Ut et magna in odio convallis egestas.
178: Suspendisse vulputate risus nec elit tincidunt ullamcorper.
185: Cras ipsum mauris,
188: ultrices quis scelerisque rutrum,
192: rutrum vitae odio.
195: Phasellus mollis ultrices risus ac pellentesque.
201: Donec commodo hendrerit tempus.
205: Cras tempor,
207: lectus at consequat porttitor,
211: quam sem tempor ante,
215: non blandit magna mi malesuada ipsum.
221: Nulla facilisi.
223: Cras sit amet quam vel urna tincidunt porta vel id risus.
234: Praesent porta malesuada felis,
238: at aliquam lorem lacinia et.
243: Maecenas tristique blandit nulla at ultrices.
249: Aenean imperdiet,
251: mi suscipit tristique viverra,
255: odio purus sagittis leo,
259: ut facilisis leo risus quis massa.
265: Nam in fringilla nisi.
269: Morbi at massa quis tellus scelerisque dapibus.
276: Morbi pellentesque ornare nunc,
280: nec facilisis ligula ultricies ut.
285: Cum sociis natoque penatibus et magnis dis parturient montes,
294: nascetur ridiculus mus.
297: Nulla facilisi.
299: Nam sagittis,
301: lorem in fringilla vulputate,
305: diam odio molestie neque,
309: et congue odio dui sit amet eros.
316: Etiam eu elit vitae eros lacinia ornare.
323: Phasellus euismod eleifend pharetra.
327: Aenean ac dui nulla,
331: a interdum est.
334: Donec lectus nisi,
337: sagittis id auctor vel,
341: facilisis ac nulla.
344: Fusce ut arcu vel ante semper pharetra.
351: Donec ac varius mauris.
355: Vivamus volutpat sagittis enim,
359: ut tempus neque accumsan sit amet.
365: Fusce sit amet nibh velit.
370: Nam pellentesque mauris vestibulum lacus bibendum iaculis.
377: Donec tempus,
379: risus sit amet accumsan pulvinar,
384: diam nunc tristique metus,
388: sit amet euismod purus erat vitae diam.
395: Fusce quis elit augue,
399: quis suscipit sapien.
402: Pellentesque ultrices sodales aliquet.
406: Aliquam nec velit a mi rutrum eleifend.
413: Nam id enim ac eros consectetur porttitor non eu mi.
423: Maecenas bibendum justo eget felis vehicula convallis.
430: Donec accumsan ipsum eget nunc euismod lobortis.
437: Curabitur fringilla lorem non felis adipiscing id feugiat est fermentum.

_________________
"All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies")
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Wolle-77
•--->
•--->


Anmeldedatum: 25.02.2003
Beiträge: 447
Wohnort: Geldern

BeitragVerfasst am: 07.12.2011 - 00:10    Titel: Antworten mit Zitat

Hallo Skeeve,

vielen Dank … aber leider hast Du es falsch verstanden bzw. ich glaube, ich drücke mich zu vertrackt raus. Also damit kann ich nichts tun.

Ich kann das auch selbst nicht fassen, wie kompliziert das ist und wie lange ich darüber schon brüte. Also, ich fasse mich kurz, bedacht und fange am Besten neu an.

In ein bestehendes Script muß eine Kür, eine Verbesserung, eingebaut werden. Ich bekomme an einen handler immer die beiden Variablen geliefert, also wortfolge und betroffeneswort.

Wortfolge ist ein String, welcher beliebig aussehen kann (meistens sind es nur ein bis wenige Wörter) und betroffeneswort ist eine Liste, welches aus den Nummern der Wörter in einem Absatz besteht. Spielt an der Stelle keine Rolle, nur der Verständnishalber:

Wenn die beiden Wörter "amet, consectetur" übergeben würden, bestünde die dazugehörige Liste aus {5, 6}, weil es eben das 5. und 6. Wort des Absatzes "Lorem ipsum dolor sit amet, consectetur adipiscing eilt." wäre.

Die Liste hat also immer so viele Einträge wie die Anzahl der Wörter in wortfolge und wird später erst gebraucht.

Da eben Kombinationen wie ", " oder ". " wohl Trenner sind, also die Begriffe an der Stelle nicht mehr zusammengehören, müssen innerhalb des Arbeitshandlers (bzw. vorgelagert) die Einträge geteilt verarbeitet werden.

Es geht also einfach darum, wenn etwas wie "Hallo, " ankommt, braucht nichts weiter gemacht werden, der eigentliche Arbeitshandler kann direkt aufgerufen werden.
Wenn jetzt ein "Hallo, Wach" ankommt, also ", " enthalten ist, , muß einmal das "Hallo, " und einmal "Wach" übergeben werden. Sprich, die im handler angekommene Liste {1, 2} als Beispiel natürlich auch …

Ein "Hm. Habe fertig, Oder. Nicht?" und die Liste {1, 2, 3, 4, 5} (weil 5 Wörter) sähe dann so aus: {1}, {2, 3}, {4}, {5}.


Also ich muß AppleScript-Listen behalten. Und es geht nicht um die Wörter eines absoluten Absatzes, da man sich bereits in einem handler befindet, der nur diese beiden Variablen hat.
Also sind die Werte auch völlig egal, müssen nicht ermittelt werden, sondern nur die Listenelemente verwendet werden.

Ich hoffe, ich stifte nicht noch mehr Verwirrung :-(



Ich habe mir das so gedacht:

Sobald eben dieser perl-Einzeiler feststellt, daß da so eine Kombination enthalten ist (also Komma Wortzwischenraum und danach noch mindestens ein anderes Zeichen; denn ein Komma am Ende wäre ja egal), gehe ich in einer Schleife
Code:
{". ", ", ", "; ", ": "}
diese 5 Einträge durch.

Sobald ich eines finde, evtl. mit offset of oder so, reiße ich den string auseinander, entsprechend auch die Liste der Einträge (denn die muß ja immer passend dazu bleiben) und rufe dann den Arbeitshandler rekursiv auf – solange, bis es keine der Kombinationen mehr gibt.
_________________
Martin Wolter
--
Apple rocks the planet!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
TMA
•-->
•-->


Anmeldedatum: 30.11.2005
Beiträge: 53

BeitragVerfasst am: 07.12.2011 - 09:44    Titel: Antworten mit Zitat

Hi Martin,
habe hier mal was gebastelt. Weis zwar nicht genau ob es deinen Anforderungen entspricht aber vielleicht kann es als Anregung dienen.
Mittlerweile blicke ich da nicht mehr richtig durch, habe grad anderweitig viel um die Ohren. Vielleicht kannst du damit ja was anfangen.

Zurück bekommst du die Wort-ID Liste.

Die aktuellste satimage.osax solltest du installiert haben wegen dem splittext.

Code:
set tmpList to {{"Verlustreduzierung.Hallo, Nochnwort ", {2, 3}}, {"Hallo Vier", {7, 8}}, {"TecDax, DAXI ", {3, 4}}, {"einer, dieser aber auch. ", {20, 21, 22, 23}}, {"Satz mit X, aber y läuft ", {35, 36, 37, 38, 39, 40}}}

-- gesamtliste
set retList to {}

-- durch die liste repeaten
repeat with anItem in tmpList
   -- wortstring holen
   set tmpWortString to item 1 of anItem
   -- wort-ids? holen
   set tmpWortID to item 2 of anItem
   
   -- wortstring splitten
   set tmpWortString_split to splittext tmpWortString using "[,.;:] (?!$)" with regexp
   -- neue temp liste
   set tmpNewListID to {}
   -- einen dummy counter für den offset in der wort-id liste
   set dummyCounter to 1
   repeat with i in tmpWortString_split
      -- anhand der leerzeichen die anzahl der wörter im pro split ermitteln
      set tmpCounterWords to count (splittext i using " (?!$)" with regexp)
      set end of tmpNewListID to items dummyCounter thru (tmpCounterWords + dummyCounter - 1) of tmpWortID
      set dummyCounter to dummyCounter + tmpCounterWords
   end repeat
   set end of retList to tmpNewListID
end repeat

return retList


Noch viel Spaß beim tüfteln, mir reichts erst mal.

Gruß
TMA
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 07.12.2011 - 22:43    Titel: Antworten mit Zitat

Hier mal leicht abgewandelt.

Das Perl Ergebnis sieht jetzt so aus, daß ich die Nummer des ersten und letzten Worts ausgebe, gefolgt vom Satzteil.

Damit läßt sich dann leicht die "betreoffeneswort" Lite zerlegen.

Beispiel:
Code:

"Verlustreduzierung.Hallo, Nochnwort ", {2, 3}
-> 1 1   Verlustreduzierung.Hallo,
-> 2 2   Nochnwort

"Satz mit X, aber y läuft ", {35, 36, 37, 38, 39, 40}
-> 1 3   Satz mit X,
-> 4 6   aber y läuft


Hier das Script:

Code:
property folgen : {{"Verlustreduzierung.Hallo, Nochnwort ", {2, 3}}, {"TecDax, DAXI ", {3, 4}}, {"einer, dieser aber auch. ", {20, 21, 22, 23}}, {"Satz mit X, aber y läuft ", {35, 36, 37, 38, 39, 40}}}
on run
   set ergebnisse to {}
   repeat with testcase in folgen
      copy aufteil(item 1 of testcase, item 2 of testcase) to the end of ergebnisse
   end repeat
   ergebnisse
end run

on aufteil(wortfolge, betroffeneswort)
   set absaetze to (do shell script "perl -e " & (quoted form of "
      use strict;
      use warnings;
      my $text= shift;
      $text=~ s/\\n/ /g;
      my @sentences= split /(?<=[.,:;])\\s+/, $text;
      my $wc=1;
      foreach my $sentence (@sentences) {
         my $count= scalar split ' ',$sentence;
         print $wc,' ',$wc+$count-1,qq`\\t`,$sentence,$/;
         $wc+= $count;
      }
   ") & " " & quoted form of wortfolge)
   set ergebnis to {}
   repeat with zeile in paragraphs of absaetze
      set zwischenergebnis to {}
      set tabpos to offset of tab in zeile
      copy text (tabpos + 1) thru -1 of zeile to the end of zwischenergebnis
      set startpos to first word of zeile as number
      set endpos to second word of zeile as number
      copy items startpos thru endpos of betroffeneswort to the end of zwischenergebnis
      copy zwischenergebnis to the end of ergebnis
      log {startpos, endpos, first item of zwischenergebnis}
   end repeat
   return ergebnis
end aufteil

_________________
"All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies")
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Wolle-77
•--->
•--->


Anmeldedatum: 25.02.2003
Beiträge: 447
Wohnort: Geldern

BeitragVerfasst am: 07.12.2011 - 23:13    Titel: Ich habe es! Antworten mit Zitat

Liebe Leute,

vielen Dank, und Sorry Skeeve, ich habe gesehen, Du hast eben noch was dazu erstellt – aber, und ich habe jetzt lange genug darüber gebrütet – ich habe es tatsächlich auch eben geschafft.
Ein echter selbsterstellter rekursiver Handler *freu*

So sieht es jetzt aus, für den, der mal sowas braucht:

Code:
global wortfolgetestneu
set wortfolgetest to {{"Verlustreduzierung.Hallo, Nochnwort ", {2, 3}}, {"Hallo Vier", {7, 8}}, {"TecDax, DAXI ", {3, 4}}, {"einer wie wir, dieser aber auch. ", {20, 21, 22, 23, 24, 25}}, {"Satz mit X, aber y läuft ", {35, 36, 37, 38, 39, 40}}}
set wortfolgetestneu to {}

repeat with i from 1 to count items of wortfolgetest
   set {wortfolge, betroffeneswort} to item i of wortfolgetest
   my indexaufnahme(1, 2, 3, betroffeneswort, wortfolge)
end repeat

return wortfolgetestneu

# Bis hierhin nur Versuchsaufbau

on indexaufnahme(d, i, a, betroffeneswort, wortfolge)
   if (run script (do shell script "perl -nle 'if (/[\\.,;:] .+/i) {print \"true\"} else {print \"false\"}' <<< " & (quoted form of wortfolge))) is true then
      set {zf, durchgang} to {{". ", ", ", "; ", ": "}, 1}
      repeat with z in zf
         set t to (offset of (z as string) in wortfolge) # Trenner: Eines der Trennzeichen in zf
         if t is not 0 then # z kommt vor
            try
               set tempwf to text 1 thru t of wortfolge
               set restwf to text (t + 2) thru -1 of wortfolge
            on error # z stand am Ende, unnötig, restwf kann auf "" gesetzt werden
               set restwf to ""
            end try
            set tempbw to items 1 thru (count words of tempwf) of betroffeneswort
            set wortfolge to restwf
            try
               set betroffeneswort to items ((count words of tempwf) + 1) thru -1 of betroffeneswort
            on error # z stand am Ende, es gibt keine Wörter mehr
               set betroffeneswort to {}
            end try
            my indexaufnahme(d, i, a, tempbw, tempwf)
         else
            set durchgang to durchgang + 1
         end if
      end repeat
      if durchgang is 4 then # Keine Rekursion fand statt, wird also aufgenommen, falls wf nicht leer
         if wortfolge is not "" then my indexaufnahmekonkret(d, i, a, item 1 of betroffeneswort, wortfolge)
      end if
   else # glatte Kiste, auf die gesamte Einzelprüfung wird verzichtet (auch in Rekursion) und die Wortfolge hinzugefügt
      my indexaufnahmekonkret(d, i, a, item 1 of betroffeneswort, wortfolge)
   end if
end indexaufnahme

on indexaufnahmekonkret(d, i, a, betroffeneswort, wortfolge) # Das hier ist nur Beispieldummy, sieht in der Praxis natürlich anders aus
   set end of wortfolgetestneu to (my bereinigen(wortfolge) & tab & betroffeneswort) as string
end indexaufnahmekonkret

on bereinigen(wortfolge)
   return do shell script "sed -e 's/^[ .,;:()\"„“]*//' -e 's/[ .,;:()\"„“]*$//' -e 's/<FEFF>//g' <<< " & quoted form of wortfolge
end bereinigen



Zum Verständnis: Der Versuchsaufbau ist ja nur Dummy; wie gesagt ist das Teil eines größeren Projektes. Der handler, der die Aufteilung übernehmen soll (heißt hier indexaufnahme) ruft sich wenn nötig rekursiv neu auf.
Ich habe ihn auch kommentiert.

Wie immer bewundere ich dieses Perl-Gebilde, kann es aber gleichzeitig nicht nachvollziehen – und, nachdem wir nun zwei funktionierende Lösungen haben, habe ich mal einen Performance-Test angestellt und beides mal 100 Mal laufen lassen … Also Deine Methode gewinnt da deutlich mit 13:21 Sekunden, ich muß sie nur noch verstehen … ;-)
_________________
Martin Wolter
--
Apple rocks the planet!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
TMA
•-->
•-->


Anmeldedatum: 30.11.2005
Beiträge: 53

BeitragVerfasst am: 08.12.2011 - 09:34    Titel: Antworten mit Zitat

Hallo Martin,
schön das du es geschafft hast.
Nur aus Interesse, konntest du denn mit meiner Version noch was anfangen?

Gruß
TMA
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Wolle-77
•--->
•--->


Anmeldedatum: 25.02.2003
Beiträge: 447
Wohnort: Geldern

BeitragVerfasst am: 08.12.2011 - 14:48    Titel: Antworten mit Zitat

Hi TMA,

ich konnte mit Deiner Version leider nicht mehr was anfangen. Ich habe sie erst gar nicht zum Laufen gebracht. Die Satimage habe ich nicht drauf und kann sie auch später ohnehin nicht einsetzen.
Daher habe ich dann erst versucht, das splittext als handler nachzubauen, das schlug dann aber fehl, da ich den Lookbehind/ahead nicht so in sed nachbauen konnte.
Da habe ich es dann gelassen und versucht, das doch von Beginn an zu bauen.
_________________
Martin Wolter
--
Apple rocks the planet!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Fischer-Bayern.de Foren-Übersicht -> AppleScript X Alle Zeiten sind GMT + 2 Stunden
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2002 phpBB Group
Deutsche Übersetzung von phpBB.de


AppleScript für absolute Starter