[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Skript zum Index generieren

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

Skript zum Index generieren

Martin Eckert
Beiträge gesamt: 102

2. Mär 2007, 11:51
Beitrag # 1 von 103
Bewertung:
(65283 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, scheinbar gibt es ein Skript zur Erzeugung eines Index mit Hilfe einer Textdatei. Kann mir da jemand einen Tipp geben wo ich das finde? Hintergrund: Ich habe ein Textdokument in dem ich Wörter habe, und muß diese nun innerhalb eines Buchs den passenden Seiten zuweisen und anschließend ein Register zu erstellen. Würde mir viel manuelles Gebastel ersparen.
Herzliche Grüße

Martin Eckert

(Dieser Beitrag wurde von Martin Eckert am 2. Mär 2007, 12:05 geändert)
X

Skript zum Index generieren

Martin Fischer
  
Beiträge gesamt: 11930

2. Mär 2007, 12:15
Beitrag # 2 von 103
Beitrag ID: #279438
Bewertung:
(65162 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

eine Übersicht über im Forum publizierte und diskutierte Skripte findest Du über den Link oben im Kasten (http://www.hilfdirselbst.org/indesign.php)

Das Skript "IndexFromList.js" findest Du hier:
IndexFromList.js

Könntest Du nach Deinen Versuchen mit dem Skript eine Rückmeldung geben, ob es das leistet, was Du erwartet hast?

Es ist im Zusammenhang mit einem Bug in JavaScript für InDesign mit Problemen bei Einträgen in Fußnoten zu rechnen. Außerdem bin ich mir nicht sicher, ob Text in Tabellen berücksichtigt wird.

Viele Grüße
Martin


als Antwort auf: [#279429]
(Dieser Beitrag wurde von Martin Fischer am 2. Mär 2007, 14:29 geändert)

Skript zum Index generieren

Martin Eckert
Beiträge gesamt: 102

2. Mär 2007, 14:24
Beitrag # 3 von 103
Beitrag ID: #279506
Bewertung:
(65139 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,
danke für die schnelle Hilfe. Kann das sein, daß das unter CS2 nicht läuft? Gibt es da eine passende Variante? Der von Dir angegebene Link tut nicht und das im Forum scheint CS1 zu sein.
Herzliche Grüße

Martin Eckert


als Antwort auf: [#279438]

Skript zum Index generieren

Martin Fischer
  
Beiträge gesamt: 11930

2. Mär 2007, 14:51
Beitrag # 4 von 103
Beitrag ID: #279523
Bewertung:
(65132 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Martin,

sorry, bei der Eingabe des Links ist mir ein Fehler passiert (ist jetzt korrigiert).

Habe das Skript auf die Schnelle überprüft.
Es läuft nicht auf CS2.

Das Skript ist mir ohnehin etwas seltsam gestrickt, deswegen hatte ich beim Verweis darauf auch etwas Unbehagen.

Es gibt ein tolles Skript von Peter Kahrel zur Indizierung von Begriffen, die mit einem bestimmten Zeichenformat ausgezeichnet sind.

Dieses Skript wollte ich mir immer schon mal als Grundlage nehmen für ein überarbeitetes Skript zur Herstellung der Indizierung über eine Konkordanzdatei. Im Prinzip bräuchte es dazu nur eine andere Methode, die Quelle zu bestimmen (nicht über das Zeichenformat, sondern über die Begriffe selbst, die über eine externe Datei eingelesen werden).

Bislang hatte sich mir der konkrete Bedarf nicht so dringend gestellt, daß ich mir dafür eine Stunde geopfert hätte. Und jetzt finde ich keine Stunde, in der ich das nachholen könnte.

Viele Grüße
Martin


als Antwort auf: [#279506]
(Dieser Beitrag wurde von Martin Fischer am 2. Mär 2007, 22:50 geändert)

Skript zum Index generieren

zaphodbeeblebroxx
Beiträge gesamt: 408

2. Mär 2007, 22:59
Beitrag # 5 von 103
Beitrag ID: #279612
Bewertung:
(65100 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
 
Hallo Martin + Martin,

habe mich vor längerer Zeit auch mal mit dem Skript IndexFromList.js befasst. Aber bei mir lief es auch nicht.

Habe mir dann selbst eine Lösung gebastelt (Auf Basis von Peter Kahrels Ausführungen), die ich aber momentan in meinem "Skripte-Chaos" nicht auffinden kann.

Ausgangsbasis war eine Textdatei mit den zu suchenden Index-Einträgen/Begriffen (nur eine Index-Ebene). Zeilen jeweils mit einer Zeilenschaltung abgeschlossen.

Habe die komplette Textdatei in ein InDesign Textrahmen kopiert. (Damals wusste ich noch nicht so richtig, wie man per JS eine txt-Datei öffnen/auslesen kann).

Vor dem Starten des Skripts mußte dieser Rahmen mit den zu suchenden Begriffen aktiviert werden.

mit dem split()-Befehl wurden die Absätze (= Suchbegriffe) in ein Array eingelesen.

Dann wurde der aktivierte Textrahmen gelöscht (sonst wird der mitindexiert).

Dann eine Schleife durch die Array-Elemente und mittels myDoc.search() das geöffnete Dokument durchsucht.

Bei Übereinstimmungen einen Index-Eintrag mit dem Array-Element und der PageReference erzeugen (habe ich bei Peter "abgeschaut").

Am Ende der Schleife den Index updaten.

Fertig!

Fussnoten gab es bei mir nicht, deshalb weiß ich nicht, ob es auch mit Fussnoten funktioniert.

Bei der search()-Methode habe ich mit den Optionen caseSensitiv = true und wholeWord = true gearbeitet.

Das setzt natürlich dann bei der gelieferten Index-Liste voraus, dass es sich um komplette Suchbegriff und nicht um Teilbegriffe handelt.

D.h. wenn in der gelieferten Liste das Wort "Schlange" steht wird nur nach diesem Wort gesucht und nicht nach der Mehrzahl "Schlangen" oder einem Begriff wie z.B. "Schlagenlinie".

zaphodbeeblebroxx


Matthias


als Antwort auf: [#279523]

Skript zum Index generieren

Martin Fischer
  
Beiträge gesamt: 11930

5. Mär 2007, 08:48
Beitrag # 6 von 103
Beitrag ID: #279797
Bewertung:
(65005 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Mit folgendem Skript lassen sich Indexeinträge basierend auf einer Konkordanzliste (Liste mit aufzunehmenden Begriffen) erzeugen. Ein Dialog fordert zur Auswahl der Textdatei mit der Begriffsliste auf. Die Begriffe müssen durch Zeilenschaltung voneinander getrennt sein (je Begriff eine neue Zeile).

Code
// IndexFromList.jsx  
//DESCRIPTION: Erzeugt Indexeinträge anhand einer externen Konkordanzdatei, die über einen Dialog ausgewählt wird.

var myDoc = app.activeDocument;
var myList = File.openDialog ("Liste mit Indexbegriffen");
if (!myList) exit();

var myWords = getWords(myList);
proceedWithList(myWords);
alert("Habe fertig!");


// Konkordanzliste einlesen
function getWords (aFile) {
if (aFile.exists) {
aFile.open ('r', undefined, undefined);
var aText = aFile.read()+'\n';
// löschen von Leerzeichen am Ende der Zeile + löschen von leeren Zeilen
aText = aText.replace(/ +\n/g, '\n').replace(/\n+/g, '\n');
// ersetzen von mehrfach aufeinander folgende Leerzeichen aller Art und von RETURNs durch RETURNs
aText = aText.replace(/\s+/g, '\n');

var words = aText.split('\n');
aFile.close();
return words;
}
else {
exit();
}
}

// Begriffsliste abarbeiten
function proceedWithList (w) {
// bei Bedarf wird ein neuer Index erzeugt
if (myDoc.indexes.length == 0)
myDoc.indexes.add();

app.findPreferences = app.changePreferences = null;

for (var i = 0; i < w.length; i++)
if (w[i] != "")
makeEntry(w[i]);

// Aktualisieurng des Index
myDoc.indexes[0].update();
}

// Indexeintrag erzeugen
function makeEntry(oneWord) {
var myResult = myDoc.search(oneWord, true, true, undefined);
for (var oneEntry = myResult.length-1; oneEntry >=0; oneEntry--) {
// Fehler abfangen, z.B. Fußnoten ausnehmen
try {
// Hinzufügen des Themas
myDoc.indexes[0].topics.add(oneWord);
// Hinzufügen der Referenz
myDoc.indexes[0].topics.item(myResult[oneEntry].contents).pageReferences.add(myResult[oneEntry], PageReferenceType.currentPage);
}
catch(e) {}
}
}


Das Skript basiert auf Peter Kahrels IndexFromCharacterStyle_shortVersion.js (Dank für die Vorlage).

Aktuell ist es so eingestellt, daß es Groß-/Kleinschreibung unterscheidet ("fischen" ungleich "Fischen") und daß es nach ganzen Worten sucht ("Fisch" findet "Fisch", aber nicht "Fischer").
Diese Einschränkung könnte bei Bedarf später per Dialog mit Optionen geöffnet werden.

Ferner ignoriert diese Version Fundstellen in Fußnoten.
Um letztere zu berücksichtigen, müßten die Fußnoten z.B. über das Skript notes2text.jsx von Peter Kahrel zunächst in Endnoten umgewandelt und nach der Erzeugung der Indexeinträge mit demselben Skript wieder in Fußnoten zurückkonvertiert werden.

edit (16.11.2007):
Eine aktualisierte Fassung (für InDesign CS2) findet sich in Indexhilfe erwünscht.

Viele Grüße
Martin


als Antwort auf: [#279612]
(Dieser Beitrag wurde von Martin Fischer am 16. Nov 2007, 23:51 geändert)

Skript zum Index generieren

zaphodbeeblebroxx
Beiträge gesamt: 408

5. Mär 2007, 09:27
Beitrag # 7 von 103
Beitrag ID: #279802
Bewertung:
(65000 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

bei Dir gibt es anscheinend kein Wochenende!?

Wie ich sehe, hast Du bereits Deine Endfassung ins Forum gestellt.

Habe mir mal (kurz – wieder mal kaum Zeit während der Produktion) den Code angesehen. Das sieht m.E. sehr gut aus.

Beim Einlesen der Konkordanzliste könnte man evtl. noch auf doppelte Leerzeichen prüfen und durch einzelne ersetzen ...

Code
		aText = aText.replace(/\s+/g, ' '); 



zaphodbeeblebroxx


Matthias


als Antwort auf: [#279797]

Skript zum Index generieren

Martin Fischer
  
Beiträge gesamt: 11930

5. Mär 2007, 09:33
Beitrag # 8 von 103
Beitrag ID: #279804
Bewertung:
(64998 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Matthias,

> Beim Einlesen der Konkordanzliste könnte man evtl. noch auf doppelte Leerzeichen
> prüfen und durch einzelne ersetzen ...

Schaden tut's gewiß nicht.
Auf diese Fehlerquelle bin ich spontan nicht gekommen, auch wenn ich mich den überflüssigen Leerzeichen am Ende einer Zeile und überflüssigen Zeilen gewidmet habe.

Was könnte in der Konkordanzliste sonst noch alles falsch notiert werden?
Wer nicht ordentlich arbeitet, den betraft eben das Skript mit Nichtbeachtung fehlerhafter Einträge.

Viele Grüße
Martin


als Antwort auf: [#279802]

Skript zum Index generieren

zaphodbeeblebroxx
Beiträge gesamt: 408

5. Mär 2007, 09:59
Beitrag # 9 von 103
Beitrag ID: #279808
Bewertung:
(64987 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

alle Fehler wird man in der Tat nicht abfangen können ...

Die Wortliste sollte schon ordentlich angeliefert/vorbereitet werden.
Hatte ja auch bereits auf die möglichen Probleme mit verschiedenen Wortendungen aus dem jeweiligen textlichen Zusammenhang und der Groß-/Kleinschreibung hingewiesen.

Das entfernen der Leerzeilen halte ich aber für sehr sinnvoll. Sonst gibt es unnötige Index-Einträge.

zaphodbeeblebroxx


Matthias


als Antwort auf: [#279804]

Skript zum Index generieren

Martin Fischer
  
Beiträge gesamt: 11930

5. Mär 2007, 19:42
Beitrag # 10 von 103
Beitrag ID: #279958
Bewertung:
(64947 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Matthias,

> Beim Einlesen der Konkordanzliste könnte man evtl. noch auf doppelte Leerzeichen
> prüfen und durch einzelne ersetzen ...

Das habe ich gerade ausprobiert.
Funktioniert - aber zu weit.
Die RETURNs gehören zu den white space characters.
Deswegen werden die auch durch Leerzeichen ersetzt.
Das ist solange kein Problem, solange einer nicht zwei oder mehr aufeinanderfolgende Wörter (kommt das vor?) in das Register aufnehmen will. Dann kann man den white space einfach durch RETURN ersetzen:
Code
aText = aText.replace(/\s+/g, '\n'); 


Oder man ersetzt vorher die RETURNs temporär durch eine besondere Kombination, die man hinterher wieder in RETURNs auflöst.

Viele Grüße
Martin


als Antwort auf: [#279802]

Skript zum Index generieren

zaphodbeeblebroxx
Beiträge gesamt: 408

6. Mär 2007, 09:44
Beitrag # 11 von 103
Beitrag ID: #280029
Bewertung:
(64913 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi Martin,

anstatt den "white space characters" könnte man auch nur die "normalen" mehrfachen Leerzeichen ersetzen (+ mehrfach Returns durch einzelne). Ich hatte auch schon den Fall, das mehrere aufeinanderfolgende Wörter indexiert werden mussten.

Code
aText = aText.replace(/ +/g, ' ');  
aText = aText.replace(/\n+/g, '\n');


zaphodbeeblebroxx


Matthias


als Antwort auf: [#279958]

Skript zum Index generieren

Peter Kahrel
Beiträge gesamt: 182

6. Mär 2007, 11:23
Beitrag # 12 von 103
Beitrag ID: #280050
Bewertung:
(64896 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
aText = aText.replace(/\n+/g, '\n');

ersetzt auch einzelne \n, also folgendes wäre es besser:

aText = aText.replace(/\n\n+/g, '\n');

oder

aText = aText.replace(/\n{2,}/g, '\n');

Peter


als Antwort auf: [#280029]
(Dieser Beitrag wurde von Peter Kahrel am 6. Mär 2007, 11:24 geändert)

Skript zum Index generieren

zaphodbeeblebroxx
Beiträge gesamt: 408

6. Mär 2007, 11:47
Beitrag # 13 von 103
Beitrag ID: #280054
Bewertung:
(64885 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Peter,

vielen Dank für den Hinweis!

Das hatte ich trotz Lesen Deiner beiden O'Reilly-Bücher übersehen.

zaphodbeeblebroxx


Matthias


als Antwort auf: [#280050]

Skript zum Index generieren

RONNY-LE
Beiträge gesamt: 2

21. Sep 2007, 11:32
Beitrag # 14 von 103
Beitrag ID: #313542
Bewertung:
(63871 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo! Jetzt muss ich diesen Thread nochmal ausgraben und um eine Frage bereichern. Für ein Stichwortverzeichnis von Personen mit Vor- und Nachnamen habe ich mir dieses Script angesehen und unter ID CS3 getestet. Das Auslesen und Erstellen des Indexes funktioniert wunderbar, nachdem ich folgend Zeile am Anfang in das Script eingfügt habe:

app.scriptPreferences.version = 4.0;

Nun stellt sich mir die Frage, ob es möglich ist, beim Indizieren den Nachnamen alphabetisch zu sortieren, anstelle des Vornamens. Mittels des Tastaturkürzels: Umschalt + Strg + Alt + ö lässt sich dies nämlich manuell in den Index aufnehmen und es steht anstelle von (Vorname Nachname) (Nachname, Vorname) im Index. Leider lässt sich dies m.W. nachträglich nicht mehr ändern.

Lässt sich dieses Script diesbezüglich ändern? Vielen Dank für eine Antwort und beste Grüße, Ronny


als Antwort auf: [#280054]

Skript zum Index generieren

Martin Fischer
  
Beiträge gesamt: 11930

21. Sep 2007, 12:22
Beitrag # 15 von 103
Beitrag ID: #313546
Bewertung:
(63850 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Stehen in der Konkordanzliste immer genau ein Vorname und ein Nachname in der Zeile?
Gibt es auch einen "Franz Xaver Fleischer"?
Oder eine "Hildegard Däumling, geb. Fletscher"?

Mach mal einen Versuch und ersetze die Zeilen
Code
// Hinzufügen des Themas  
myDoc.indexes[0].topics.add(oneWord);
// Hinzufügen der Referenz
myDoc.indexes[0].topics.item(myResult[oneEntry].contents).pageReferences.add(myResult[oneEntry], PageReferenceType.currentPage);


durch folgende Zeilen:
Code
// Hinzufügen des Themas  
aText = oneWord.split(" ");
nText = aText.pop() + ", " + aText.join(" ");
myTopic = myDoc.indexes[0].topics.add(nText);
// Hinzufügen der Referenz
myTopic.pageReferences.add(myResult[oneEntry], PageReferenceType.currentPage);


Ferner mußt Du die folgende Anweisung auskommentieren (zwei Schrägstriche vor aText setzen):

Code
// ersetzen von mehrfach aufeinander folgende Leerzeichen aller Art und von RETURNs durch RETURNs  
aText = aText.replace(/\s+/g, '\n');


Viele Grüße
Martin


als Antwort auf: [#313542]
(Dieser Beitrag wurde von Martin Fischer am 21. Sep 2007, 12:36 geändert)
X
Hier Klicken

Farbmanagement

Farbmanagement
din_300

Veranstaltungen

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen. pdf-icon Hier eine kleine Anleitung.

Veranstaltungen
13.12.2018 - 20.12.2018

3400 Burgdorf, BE
Donnerstag, 13. Dez. 2018, 09.00 Uhr - Donnerstag, 20. Dez. 2018, 09.00 Uhr

Workshop

Schritt für Schritt: Planen, konzipieren und Umsetzen einer responsiven Website mit Wordpress: Lokalen Server einrichten; Frontend/Backend; Vorgehen Schritt für Schritt bis zur fertigen Site.

2-Tages-Workshop CHF 990.00

Ja

Organisator: PubliCollege GmbH

Kontaktinformation: Beat Kipfer, E-Mailinfo AT publicollege DOT ch

www.publicollege.ch

Websites erstellen mit Wordpress und Elementor Pro
Veranstaltungen
19.12.2018

Wie installiert und konfiguriert man Mailchimp und verwendet es für sein Business

Internet
Mittwoch, 19. Dez. 2018, 10.00 - 11.30 Uhr

Webinar

In diesem Webinar zeige ich den Teilnehmern, wie sie mit Mailchimp eigene Newsletter verschicken können. Wie sie Mailchimp installieren und konfigurieren müssen und wie sie eine erste Kampagne machen können.

Gratis

Ja

Organisator: Eric Mächler

https://events.genndi.com/register/818182175026318367/4ac0f277c0

Der Start ins E-Mail Marketing mit Mailchimp
Hier Klicken