-
Notifications
You must be signed in to change notification settings - Fork 30
Text Analysis ID FC
fabiantheblind edited this page Nov 19, 2015
·
2 revisions
This is Text Analysis with the InDesign build in Find And Change Options.
/*
This is text analysis the InDesign way.
It uses the InDesign Find And Change Options
*/
main();
function main(){
// create doc, get page, add text frame
var the_text_to_analyse = "Ich bin Blindtext. Von Geburt an.\r"+
"Es hat lange gedauert, bis ich begriffen habe,\r"+
"was es bedeutet, ein blinder Text zu sein:\r"+
"Man macht keinen Sinn. Man wirkt hier und da aus dem Zusammenhang gerissen.\r"+
"Oft wird man gar nicht erst gelesen.\r"+
"Aber bin ich deshalb ein schlechter Text?\r"+
"Ich weiß, dass ich nie die Chance haben werde im Stern zu erscheinen.\r"+
"Aber bin ich darum weniger wichtig? Ich bin blind!\r"+
"Aber ich bin gerne Text.\r"+
"Und sollten Sie mich jetzt tatsächlich zu Ende lesen,\r"+
"dann habe ich etwas geschafft, was den meisten 'normalen' Texten nicht gelingt.\r"+
"Ich bin Blindtext. Von Geburt an.\r"+
"Es hat lange gedauert, bis ich begriffen habe, was es bedeutet, ein blinder Text zu sein:\r"+
"Man macht keinen Sinn. Man wirkt hier und da aus dem Zusammenhang gerissen.\r"+
"Oft wird man gar nicht erst gelesen. Aber bin ich deshalb ein schlechter Text?\r"+
"Ich weiß, dass ich nie die Chance haben werde im Stern zu erscheinen.\r"+
"Aber bin ich darum weniger wichtig? Ich bin blind!\r"+
"Aber ich bin gerne Text.\r"+
"Und sollten Sie mich jetzt tatsächlich zu Ende lesen, dann habe ich etwas geschafft,\r"+
"was den meisten 'normalen' Texten nicht gelingt. Ich bin Blindtext.";
var doc = app.documents.add();
var page = doc.pages[0];
var docpref = doc.documentPreferences; // these are the prefs
// some values
var pw = 200;
var ph = 200;
// set the doc size
docpref.pageWidth = pw;
docpref.pageHeight = ph;
// make a text frame
var tf = page.textFrames.add({geometricBounds:[12.7,12.7,ph-12.7,pw-12.7]});
// add some placeholder text
tf.contents = the_text_to_analyse;
/*
It is important to empty the Find Change fields of the interface
*/
app.findTextPreferences = NothingEnum.nothing; // now empty the find what field!!! that's important!!!
app.changeTextPreferences = NothingEnum.nothing; // empties the change to field!!! that's important!!!
// some settings for FC
app.findChangeTextOptions.includeFootnotes = true;
app.findChangeTextOptions.includeHiddenLayers = false;
app.findChangeTextOptions.includeLockedLayersForFind = false;
app.findChangeTextOptions.includeLockedStoriesForFind = true;
app.findChangeTextOptions.includeMasterPages = true;
// better like this
// app.findChangeTextOptions.properties = {
// includeFootnotes : true,
// includeHiddenLayers : false,
// includeLockedLayersForFind : false,
// includeLockedStoriesForFind : true,
// includeMasterPages : true
// };
var result_list = new Array(); // this will hold our result
/*
loop the words
we get the result and push it into an object
than we remove all results so they dont get a double count
*/
for(var i = 0; i < tf.words.length;i++){
var a_single_word = tf.words[i].contents; // get the word for better handling
app.findTextPreferences.findWhat = a_single_word; // fill in the serach term
app.changeTextPreferences.changeTo = "";//after we counted the words we remove them
var result = doc.findText(); // now execute the FC
// we push the word and the count of it into an
// JSON OBJECT
result_list.push({
"word":a_single_word,
"count":result.length
});
doc.changeText();
app.findTextPreferences = NothingEnum.nothing; // now empty the find what field!!! that's important!!!
app.changeTextPreferences = NothingEnum.nothing; // empties the change to field!!! that's important!!!
}; // end loop
result_list.sort(compare); // this is deep JS stuff
var word_num = result_list.length;
// alert(result_list.toSource());
// Give back the result in a nice fashion
alert(
"You have " + word_num +" words in your text.\n" +
"The five top words are:\n"+
"Number 5: "+ result_list[word_num - 5].word + " - " + result_list[word_num -5].count +"\n"+
"Number 4: "+ result_list[word_num - 4].word + " - " + result_list[word_num -4].count +"\n"+
"Number 3: "+ result_list[word_num - 3].word + " - " + result_list[word_num -3].count +"\n"+
"Number 2: "+ result_list[word_num - 2].word + " - " + result_list[word_num -2].count +"\n"+
"Number 1: "+ result_list[word_num - 1].word + " - " + result_list[word_num -1].count +"\n"+
"Amazing. Isn't it?"
);
// you could just copy paste this alert into another file
// have a look how to include a file in here
// https://github.com/fabiantheblind/auto-typo-adbe-id/wiki/Includes
// alert("var data = " + result_list.toSource());
} // end main function
// this is deep Javascript Stuff
// you can write your custom comparator
// read this Stackoverflow post
// http://stackoverflow.com/questions/1129216/sorting-objects-in-an-array-by-a-field-value-in-javascript
function compare(a,b) {
if (a.count < b.count)
return -1;
if (a.count > b.count)
return 1;
return 0;
}
This wiki is maintained by:
fabiantheblind
Thanks to:
- JohnDarnell for fixing lots of typos.
- jsp for fixing lots of typos.
- ltfschoen for fixing typos.
- wridgers for adding more links.
Thanks to the students from the seminar for asking all those questions and making me start this wiki.
- adinaradke
- AnitaMei
- ce0311
- coerv
- felixharle
- FerdinandP
- Flave
- marche
- monkian
- natael
- OliverMatelowski
- PDXIII
- praktischend
- schlompf
- skaim
You are awesome.
- Arrays
- Classes
- Comments
- Conditionals
- Functions
- Inspect Properties
- Loops
- Objects
- Output And Interaction
- Recursive Functions
- Inspect Properties
- Variables And Operations
- Extended JavaScript Guide
- Bridge Talk
- Create And Read Files
- ExtendScript Toolkit
- File
- Folder
- Includes JSX
- Object Watch
- Read In JSON From File And DONT Eval
- Storing Data In A Target Engine
- Target an application
- XML
- app
- Colorbrewer
- Colors And Swatches
- Delay And View
- Dialogs
- Documents
- Duplicate And Transform
- Event AfterSave
- Export IDML
- ExtendScript in InDesign Scripting DOM
- Fonts
- GeometricBounds and Coordinates
- Get named pageItems
- Graphic Lines
- Groups
- HSL Color Wheel
- Images
- Includes
- InsertionPoints
- Layers
- Line Feeds And Carrige Returns
- Masterspreads
- Matrix
- Objectstyles
- Outlines Groups Alignment
- Pages And Margins
- Pathfinder
- Placeholder Text
- Rectangles Ovals Polygons
- RulerOrigin
- Select words at insertionPoint
- Simple Find And Change Grep with FC Query
- Simple Find And Change Grep
- Simple Find And Change Text
- Spiro
- Styles
- Text Analysis ID FC
- Text Analysis
- Text Find Locations
- Text
- Transformation Matricies
- TransparencySettings
- XML creation and import