hilfdirselbst.ch
Facebook Twitter gamper-media

Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign Skriptwerkstatt » Skript zum Index generieren

 

« « 1 2 3 4 5 ... 7 » »  


Martin Eckert p
Beiträge: 95

2. Mär 2007, 11:51

Beitrag #1 von 100
Bewertung:

(18770 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Skript zum Index generieren


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.

Schöne Grüße

Martin Eckert


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

Martin Fischer  M  p
Beiträge: 9423

2. Mär 2007, 12:15

Beitrag #2 von 100
Beitrag ID: #279438

Bewertung:

(18743 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Skript zum Index generieren


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.


Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#279429]

(Dieser Beitrag wurde von Martin Fischer am 2. Mär 2007, 14:29 geändert)
Top

Martin Eckert p
Beiträge: 95

2. Mär 2007, 14:24

Beitrag #3 von 100
Beitrag ID: #279506

Bewertung:

(18719 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Skript zum Index generieren


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.

Schöne Grüße

Martin Eckert

als Antwort auf: [#279438] Top

Martin Fischer  M  p
Beiträge: 9423

2. Mär 2007, 14:51

Beitrag #4 von 100
Beitrag ID: #279523

Bewertung:

(18712 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Skript zum Index generieren


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.


Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#279506]

(Dieser Beitrag wurde von Martin Fischer am 2. Mär 2007, 22:50 geändert)
Top

zaphodbeeblebroxx p
Beiträge: 396

2. Mär 2007, 22:59

Beitrag #5 von 100
Beitrag ID: #279612

Bewertung:

(18683 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Skript zum Index generieren


 
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] Top

Martin Fischer  M  p
Beiträge: 9423

5. Mär 2007, 08:48

Beitrag #6 von 100
Beitrag ID: #279797

Bewertung:

(18588 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Skript zum Index generieren


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.


Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#279612]

(Dieser Beitrag wurde von Martin Fischer am 16. Nov 2007, 23:51 geändert)
Top

zaphodbeeblebroxx p
Beiträge: 396

5. Mär 2007, 09:27

Beitrag #7 von 100
Beitrag ID: #279802

Bewertung:

(18583 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Skript zum Index generieren


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] Top

Martin Fischer  M  p
Beiträge: 9423

5. Mär 2007, 09:33

Beitrag #8 von 100
Beitrag ID: #279804

Bewertung:

(18581 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Skript zum Index generieren


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.


Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#279802] Top

zaphodbeeblebroxx p
Beiträge: 396

5. Mär 2007, 09:59

Beitrag #9 von 100
Beitrag ID: #279808

Bewertung:

(18570 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Skript zum Index generieren


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] Top

Martin Fischer  M  p
Beiträge: 9423

5. Mär 2007, 19:42

Beitrag #10 von 100
Beitrag ID: #279958

Bewertung:

(18530 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Skript zum Index generieren


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.


Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#279802] Top

zaphodbeeblebroxx p
Beiträge: 396

6. Mär 2007, 09:44

Beitrag #11 von 100
Beitrag ID: #280029

Bewertung:

(18496 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Skript zum Index generieren


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] Top

Peter Kahrel p
Beiträge: 147

6. Mär 2007, 11:23

Beitrag #12 von 100
Beitrag ID: #280050

Bewertung:

(18479 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Skript zum Index generieren


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)
Top

zaphodbeeblebroxx p
Beiträge: 396

6. Mär 2007, 11:47

Beitrag #13 von 100
Beitrag ID: #280054

Bewertung:

(18468 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Skript zum Index generieren


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] Top

RONNY-LE
Beiträge: 2

21. Sep 2007, 11:32

Beitrag #14 von 100
Beitrag ID: #313542

Bewertung:

(17454 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Skript zum Index generieren


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] Top

Martin Fischer  M  p
Beiträge: 9423

21. Sep 2007, 12:22

Beitrag #15 von 100
Beitrag ID: #313546

Bewertung:

(17433 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Skript zum Index generieren


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');



Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#313542]

(Dieser Beitrag wurde von Martin Fischer am 21. Sep 2007, 12:36 geändert)
Top
« « 1 2 3 4 5 ... 7 » »  


Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign Skriptwerkstatt » Skript zum Index generieren


^