Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
ANNOGEN(1)		     General Commands Manual		      ANNOGEN(1)

Annotator  Generator  is  an  examples-driven generator of fast text annotators.
"Annotate" in this context means to add pronunciation or  other  information  to
each  word,  and/or  to  split	text  into words in a language that does not use
spaces.

     O	 You supply a corpus of pre-annotated texts for Annotator  Generator  to
	 work out the rules and exceptions

     O	 Annotator  Generator  creates table-driven code in C, Java, Javascript,
	 Dart or Python with 2 and 3 compatibility

     O	 The resulting program should be able to annotate any text that contains
	 words or phrases similar to those found in the examples

     O	 It can output the annotations alone or it can	combine  them  with  the
	 original text using HTML Ruby markup or simple braces

     O	 If  anything  is unclear (didn't happen in the examples, or there's not
	 enough context to figure out which example should be applied) then  the
	 program  will leave it unannotated so you can pass it to a backup anno-
	 tation program if you have one.

     O	 If you have no backup annotator then try setting the -y  option,  which
	 makes	Annotator Generator try harder to find context-independent rules
	 with context-dependent exceptions, so as to annotate as  much	text  as
	 possible.

     O	 Generated  annotators	can act as filters for Web Adjuster; options are
	 also provided for generating  Android	apps,  browser	extensions,  and
	 clipboard  annotators for Windows and Windows Mobile, or you could for-
	 mat the annotations on a Unix terminal

     -h, --help
     show this help message and exit

     --infile=
     Filename of a text file (or a compressed .gz, .bz2, .xz  or  .bz3	file  or
     URL)  to  read  the input examples from. If this is not specified, standard
     input is used.

     --incode=
     Character encoding of the input file (default utf-8)

     --mstart=
     The string that starts a piece of text with annotation markup in the  input
     examples; default <ruby><rb>

     --mmid=
     The  string that occurs in the middle of a piece of markup in the input ex-
     amples, with the word on its left and the added markup on its right (or the
     other way around if mreverse is set); default </rb><rt>

     --mend=
     The string that ends a piece of annotation markup in  the	input  examples;
     default </rt></ruby>

     -r, --mreverse
     Specifies	that  the annotation markup is reversed, so the text before mmid
     is the annotation and the text after it is the base text

     --no-mreverse
     Cancels any earlier --mreverse option in Makefile variables etc

     --end-pri=
     Treat words that occur in the examples  before  this  delimeter  as  having
     "high  priority" for Yarowsky-like seed collocations (if these are in use).
     Normally the Yarowsky-like logic tries to identify a  "default"  annotation
     based on what is most common in the examples, with the exceptions indicated
     by  collocations.	If however a word is found in a high-priority section at
     the start, then the first annotation found there will be taken as the ideal
     "default" even if it's in a minority in the examples; everything else  will
     be taken as an exception.

     -s, --spaces
     Set  this	if  you  are working with a language that uses whitespace in its
     non-markedup version (not fully tested). The  default  is	to  assume  that
     there will not be any whitespace in the language, which is correct for Chi-
     nese and Japanese.

     --no-spaces
     Cancels any earlier --spaces option in Makefile variables etc

     -c, --capitalisation
     Don't  try  to normalise capitalisation in the input. Normally, to simplify
     the rules, the analyser will try to remove  start-of-sentence  capitals  in
     annotations,  so that the only remaining words with capital letters are the
     ones that are always capitalised such as names. (That's not  perfect:  some
     words  might  always  be capitalised just because they never occur mid-sen-
     tence in the examples.) If this option is used, the analyser  will  instead
     try  to  "learn"  how to predict the capitalisation of all words (including
     start of sentence words) from their contexts.

     --no-capitalisation
     Cancels any earlier --capitalisation option in Makefile variables etc

     -w, --annot-whitespace
     Don't try to normalise the use of whitespace and hyphenation in the example
     annotations. Normally the analyser will try to do this, to reduce the  risk
     of missing possible rules due to minor typographical variations.

     --no-annot-whitespace
     Cancels any earlier --annot-whitespace option in Makefile variables etc

     --keep-whitespace=
     Comma-separated  list of words (without annotation markup) for which white-
     space and hyphenation should always be kept even without the --annot-white-
     space option. Use when you know the variation is  legitimate.  This  option
     expects  words to be encoded using the system locale (UTF-8 if it cannot be
     detected).

     --suffix=
     Comma-separated list of annotations that can be  considered  optional  suf-
     fixes for normalisation

     --suffix-minlen=
     Minimum  length  of word (in Unicode characters) to apply suffix normalisa-
     tion

     --post-normalise=
     Filename or URL of an optional Python module defining a  dictionary  called
     'table' mapping integers to integers for arbitrary single-character normal-
     isation  on  the Unicode BMP. This can reduce the size of the annotator. It
     is applied in post-processing (does not affect  rules  generation	itself).
     For  example  this can be used to merge the recognition of Full, Simplified
     and Variant forms of the same Chinese character in cases where this can  be
     done  without ambiguity, if it is acceptable for the generated annotator to
     recognise mixed-script words should they occur. If any word in the examples
     has a different annotation when normalised than not, the normalised version
     takes precedence.

     --glossfile=
     Filename of an optional text file (or compressed .gz,  .bz2,  .xz	or  .bz3
     file  or  URL)  to  read  auxiliary  "gloss" information. Each line of this
     should be of the form: word (tab) annotation (tab) gloss. Extra tabs in the
     gloss will be converted to newlines (useful if you want to  quote	multiple
     dictionaries).  When  the compiled annotator generates ruby markup, it will
     add the gloss string as a popup title whenever that word is used with  that
     annotation (before any reannotator option is applied). The annotation field
     may  be left blank to indicate that the gloss will appear for all other an-
     notations of that word. The entries in glossfile do not affect the  annota-
     tion  process itself, so it's not necessary to completely debug glossfile's
     word segmentation etc.

     -C, --gloss-closure=
     If any Chinese, Japanese or Korean word is missing from  glossfile,  search
     its  closure of variant characters also, using the Unihan variants file (or
     URL) specified by this option

     --no-gloss-closure
     Cancels any earlier --gloss-closure option in Makefile variables etc

     -M, --glossmiss-omit
     Omit rules containing any word not mentioned in glossfile. Might be  useful
     if  you  want to train on a text that uses proprietary terms and don't want
     to accidentally 'leak' those terms (assuming they're not  accidentally  in-
     cluded  in  glossfile  also). Words may also be listed in glossfile with an
     empty gloss field to indicate that no gloss is available  but  rules  using
     this word needn't be omitted.

     --no-glossmiss-omit
     Cancels any earlier --glossmiss-omit option in Makefile variables etc

     --words-omit=
     File  (or	compressed  .gz, .bz2, .xz or .bz3 file or URL) containing words
     (one per line, without markup) to omit from the annotator. Use this to make
     an annotator smaller if for example if you're working  from  a  rules  file
     that  contains long lists of place names you don't need this particular an-
     notator to recognise but you still want to keep them as rules for other an-
     notators, but be careful because any word on such a list gets omitted  even
     if it also has other meanings (some place names are also normal words).

     --manualrules=
     Filename  of  an  optional  text file (or compressed .gz, .bz2, .xz or .bz3
     file or URL) to read extra,  manually-written  rules.  Each  line	of  this
     should  be a marked-up phrase (in the input format) which is to be uncondi-
     tionally added as a rule. Use this sparingly, because these rules	are  not
     taken  into account when generating the others and they will be applied re-
     gardless of context (although a manual rule might fail to activate  if  the
     annotator	is  part-way  through processing a different rule); try checking
     messages from --diagnose-manual.

     --c-filename=
     Where to write the C, C#, Python, Javascript, Go or Dart program.	Defaults
     to  standard  output,  or	annotator.c in the system temporary directory if
     standard output seems to be the terminal (the program might be large, espe-
     cially if Yarowsky-like indicators are not used, so it's best not to use  a
     server home directory where you might have limited quota).

     --c-compiler=
     The  C compiler to run if generating C and standard output is not connected
     to a pipe. The default is to use the "cc" command which  usually  redirects
     to your "normal" compiler. You can add options (remembering to enclose this
     whole  parameter  in quotes if it contains spaces), but if the C program is
     large then adding optimisation options may make the  compile  take  a  long
     time.  If	standard  output is connected to a pipe, then this option is ig-
     nored because the C code will simply be written to the pipe. You  can  also
     set  this option to an empty string to skip compilation. Default: cc -o an-
     notator

     --outcode=
     Character encoding to use in the generated parser (default utf-8,	must  be
     ASCII-compatible i.e. not utf-16)

     --rulesFile=
     Filename  of  a  JSON file to hold the accumulated rules. Adding .gz, .bz2,
     .xz or .bz3 for compression is acceptable.  If  this  is  set  then  either
     --write-rules or --read-rules must be specified.

     --write-rules
     Write rulesFile instead of generating a parser. You will then need to rerun
     with --read-rules later.

     --no-write-rules
     Cancels any earlier --write-rules option in Makefile variables etc

     --read-rules
     Read rulesFile from a previous run, and apply the output options to it. You
     should  still  specify  the  input  formatting  options  (which  should not
     change), and any glossfile or manualrules options (which may  change),  but
     no input is required.

     --no-read-rules
     Cancels any earlier --read-rules option in Makefile variables etc

     -E, --newlines-reset
     Have  the	annotator reset its state on every newline byte. By default new-
     lines do not affect state such as whether a space is  required  before  the
     next  word,  so  that if the annotator is used with Web Adjuster's htmlText
     option (which defaults to using newline separators) the spacing  should  be
     handled sensibly when there is HTML markup in mid-sentence.

     --no-newlines-reset
     Cancels any earlier --newlines-reset option in Makefile variables etc

     -z, --compress
     Compress annotation strings in the C code. This compression is designed for
     fast on-the-fly decoding, so it saves only a limited amount of space (typi-
     cally 10-20%) but might help if RAM is short.

     --no-compress
     Cancels any earlier --compress option in Makefile variables etc

     -Z, --zlib
     Compress the embedded data table using zlib (or pyzopfli if available), and
     include  code  to call zlib to decompress it on load. Useful if the runtime
     machine has the zlib library and you need to save disk space  but	not  RAM
     (the  decompressed  table	is  stored  separately in RAM, unlike --compress
     which, although giving less compression, at least works 'in  place').  Once
     --zlib  is  in  use, specifying --compress too will typically give an addi-
     tional disk space saving of less than 1% (and a runtime RAM  saving  that's
     greater  but  more  than  offset by zlib's extraction RAM). If generating a
     Javascript annotator with	zlib,  the  decompression  code  is  inlined  so
     there's  no runtime zlib dependency, but startup can be ~50% slower so this
     option is not recommended in situations where the annotator  is  frequently
     reloaded  from source (unless you're running on Node.js in which case load-
     ing is faster due to the use of Node's "Buffer" class).

     --no-zlib
     Cancels any earlier --zlib option in Makefile variables etc

     -l, --library
     Instead of generating C code that reads and writes  standard  input/output,
     generate  a C library suitable for loading into Python via ctypes. This can
     be used  for  example  to	preload  a  filter  into  Web  Adjuster  to  cut
     process-startup delays.

     --no-library
     Cancels any earlier --library option in Makefile variables etc

     -W, --windows-clipboard
     Include  C  code  to read the clipboard on Windows or Windows Mobile and to
     write an annotated HTML file and launch a browser, instead of using the de-
     fault cross-platform command-line C wrapper. See the start of the generated
     C file for instructions on how to compile for Windows or Windows Mobile.

     --no-windows-clipboard
     Cancels any earlier --windows-clipboard option in Makefile variables etc

     --java=
     Instead of generating C code, generate Java, and place the *.java files  in
     the  directory  specified	by  this  option. The last part of the directory
     should be made up of the package name; a double slash (//) should	separate
     the  rest	of  the  path  from the package name, e.g. --java=/path/to/wher-
     ever//org/example/annotator and the main class will be called Annotator.

     --android=
     URL for an Android app to browse (--java must be set). If this is set, code
     is generated for an Android app which starts a browser with that URL as the
     start page, and annotates the text on every page it loads. Use  file:///an-
     droid_asset/index.html  for  local  HTML  files  in the assets directory; a
     clipboard viewer is placed in clipboard.html, and the app will also be able
     to handle shared text. If certain environment variables are set,  this  op-
     tion can also compile and sign the app using Android SDK command-line tools
     (otherwise it puts a message on stderr explaining what needs to be set)

     --android-template=
     File  (or URL) to use as a template for Android start HTML. This option im-
     plies --android=file:///android_asset/index.html  and  generates  that  in-
     dex.html from the file specified (or from a built-in default if the special
     filename  'blank' is used). The template file may include URL_BOX_GOES_HERE
     to show a URL entry box and related items (offline-clipboard link	etc)  in
     the  page,  in  which  case you can optionally define a Javascript function
     'annotUrlTrans' to pre-convert some URLs from shortcuts etc;  also  enables
     better  zoom  controls  on Android 4+, a mode selector if you use --annota-
     tion-names, a selection scope control on recent-enough WebKit, and a  visi-
     ble  version  stamp  (which,  if the device is in 'developer mode', you may
     double-tap on to show missing glosses). VERSION_GOES_HERE may also  be  in-
     cluded  if  you  want  to	put it somewhere other than at the bottom of the
     page. If you do include URL_BOX_GOES_HERE you'll  have  an  annotating  Web
     browser app that allows the user to navigate to arbitrary URLs: as of 2020,
     this  is  acceptable  on  Google Play and Huawei AppGallery (non-China only
     from 2022), but not Amazon AppStore as they  don't  want  'competition'  to
     their Silk browser.

     --gloss-simplify=
     A	regular expression matching parts of glosses to remove when generating a
     '3-line' format in apps, but not for hover titles or  popups.  Default  re-
     moves  parenthesised  expressions if not solitary, anything after the first
     slash or semicolon, and the leading word 'to'. Can be set to  empty  string
     to omit simplification.

     -L, --pleco-hanping
     In  the Android app, make popup definitions link to Pleco or Hanping if in-
     stalled

     --no-pleco-hanping
     Cancels any earlier --pleco-hanping option in Makefile variables etc

     --bookmarks=
     Android bookmarks: comma-separated list of package  names	that  share  our
     bookmarks.  If this is not specified, the browser will not be given a book-
     marks function. If it is set to the same value as the package specified  in
     --java,  bookmarks  are  kept  in	just this Android app. If it is set to a
     comma-separated list of packages that have also been generated  by  annogen
     (presumably  with different annotation types), and if each one has the same
     android:sharedUserId  attribute  in  AndroidManifest.xml's  'manifest'  tag
     (you'll  need to add this manually), and if the same certificate is used to
     sign all of them, then bookmarks can be shared across the	set  of  browser
     apps.  But  beware  the  following two issues: (1) adding an android:share-
     dUserId attribute to an app that has  already  been  released  without  one
     causes  some  devices  to refuse the update with a 'cannot install' message
     (details via adb logcat; affected users would need to uninstall  and  rein-
     stall instead of update, and some of them may not notice the instruction to
     do  so);  (2)  this  has  not  been  tested  with Google's new "App Bundle"
     arrangement, and may be broken if the Bundle results in APKs  being  signed
     by  a  different key. In June 2019 Play Console started issuing warnings if
     you release an APK instead of a Bundle, even though the "size savings" they
     mention are under 1% for annogen-generated apps.

     -e, --epub
     When generating an Android browser, make it also  respond	to  requests  to
     open  EPUB  files.  This results in an app that requests the 'read external
     storage' permission on Android versions below 6, so if you have already re-
     leased a version without EPUB support then devices running Android  5.x  or
     below  will not auto-update past this change until the user notices the up-
     date notification and approves the extra permission.

     --no-epub
     Cancels any earlier --epub option in Makefile variables etc

     --android-print
     When generating an Android browser, include code to provide a Print  option
     (usually  print  to PDF) and a simple highlight-selection option. The Print
     option will require Android 4.4, but the app should still run without it on
     earlier versions of Android.

     --no-android-print
     Cancels any earlier --android-print option in Makefile variables etc

     --known-characters=
     When generating an Android browser, include an option  to	leave  the  most
     frequent  characters  unannotated	as 'known'. This option should be set to
     the filename or URL of a UTF-8 file of characters	separated  by  newlines,
     assumed  to  be most frequent first, with characters on the same line being
     variants of each other (see --freq-count for one way to generate it). Words
     consisting entirely of characters found in the first N lines of  this  file
     (where N is settable by the user) will be unannotated until tapped on.

     --freq-count=
     Name  of  a file to write that is suitable for the known-characters option,
     taken from the input examples (which should be  representative  of  typical
     use).  Any  post-normalise  table	provided will be used to determine which
     characters are equivalent.

     --android-audio=
     When generating an Android browser, include an option to convert the selec-
     tion  to  audio  using  this  URL	 as   a   prefix,   e.g.   https://exam-
     ple.org/speak.cgi?text=  (use  for  languages not likely to be supported by
     the device itself). Optionally follow the URL with  a  space  (quote  care-
     fully)  and a maximum number of words to read in each user request. Setting
     a limit is recommended, or somebody somewhere will likely try 'Select  All'
     on  a  whole  book  or something and create load problems. You should set a
     limit server-side too of course.

     --extra-js=
     Extra Javascript to inject into sites to fix things in the Android  browser
     app. The snippet will be run before each scan for new text to annotate. You
     may   also   specify   a	file   to  read:  --extra-js=@file.js  or  --ex-
     tra-js=@file1.js,file2.js (or URLs; do not use // comments in these  files,
     only /* ... */ because newlines will be replaced), and you can create vari-
     ants    of    the	 files	 by   adding   search-replace	strings:   --ex-
     tra-js=@file1.js:search:replace,file2.js

     --tts-js
     Make Android 5+ multilingual Text-To-Speech functions available to extra-js
     scripts (see TTSInfo code for details)

     --no-tts-js
     Cancels any earlier --tts-js option in Makefile variables etc

     --existing-ruby-js-fixes=
     Extra Javascript to run in the Android browser  app  or  browser  extension
     whenever  existing  RUBY elements are encountered; the DOM node above these
     elements will be in the variable n, which your code can manipulate  or  re-
     place  to	fix  known  problems  with  sites' existing ruby (such as common
     two-syllable words being split when they shouldn't be). Use  with	caution.
     You    may    also    specify   a	 file	or   URL   to	read:	--exist-
     ing-ruby-js-fixes=@file.js

     --existing-ruby-lang-regex=
     Set the Android app or browser extension to remove existing  ruby	elements
     unless   the   document   language  matches  this	regular  expression.  If
     --sharp-multi is in use, you can separate multiple regexes with  comma  and
     any  unset  will  always delete existing ruby. If this option is not set at
     all then existing ruby is always kept.

     --existing-ruby-shortcut-yarowsky
     Set the Android browser app to 'shortcut' Yarowsky-like  collocation  deci-
     sions  when  adding  glosses to existing ruby over 2 or more characters, so
     that words normally requiring context to be found are  more  likely  to  be
     found  without context (this may be needed because adding glosses to exist-
     ing ruby is done without regard to context)

     --extra-css=
     Extra CSS to inject into sites to fix things in the  Android  browser  app.
     You may also specify a file or URL to read --extra-css=@file.css

     --app-name=
     User-visible name of the Android app

     --compile-only
     Assume  the code has already been generated by a previous run, and just run
     the compiler

     --no-compile-only
     Cancels any earlier --compile-only option in Makefile variables etc

     -j, --javascript
     Instead of generating C code, generate JavaScript. This might be useful  if
     you  want	to  run  an  annotator on a device that has a JS interpreter but
     doesn't let you run your own binaries. The JS will be table-driven to  make
     it load faster. See comments at the start for usage.

     --no-javascript
     Cancels any earlier --javascript option in Makefile variables etc

     -6, --js-6bit
     When  generating  a  Javascript  annotator, use a 6-bit format for many ad-
     dresses to reduce escape codes in the data string	by  making  more  of  it
     ASCII

     --no-js-6bit
     Cancels any earlier --js-6bit option in Makefile variables etc

     -8, --js-octal
     When  generating  a  Javascript annotator, use octal instead of hexadecimal
     codes in the data string when doing so would save space. This does not com-
     ply with ECMAScript 5 and may give errors in its strict mode.

     --no-js-octal
     Cancels any earlier --js-octal option in Makefile variables etc

     -9, --ignore-ie8
     When generating a Javascript annotator, do not make it  backward-compatible
     with Microsoft Internet Explorer 8 and below. This may save a few bytes.

     --no-ignore-ie8
     Cancels any earlier --ignore-ie8 option in Makefile variables etc

     -u, --js-utf8
     When generating a Javascript annotator, assume the script can use UTF-8 en-
     coding  directly  and not via escape sequences. In some browsers this might
     work only on UTF-8 websites, and/or if your  annotation  can  be  expressed
     without the use of Unicode combining characters.

     --no-js-utf8
     Cancels any earlier --js-utf8 option in Makefile variables etc

     --browser-extension=
     Name  of  a  Chrome or Firefox browser extension to generate. The extension
     will be placed in a directory of the same name (without spaces), which  may
     optionally  already  exist  and  contain icons like 32.png and 48.png to be
     used.

     --browser-extension-description=
     Description field to use when generating browser extensions

     --manifest-v3
     Use Manifest v3 instead of Manifest v2 when generating  browser  extensions
     (tested  on Chrome only, and requires Chrome 88 or higher). This is now re-
     quired for all Chrome Web Store uploads.

     --gecko-id=
     a Gecko (Firefox) ID to embed in the browser extension

     --dart
     Instead of generating C code, generate Dart. This might be  useful  if  you
     want to run an annotator in a Flutter application.

     --no-dart
     Cancels any earlier --dart option in Makefile variables etc

     --dart-datafile=
     When generating Dart code, put annotator data into a separate file and open
     it  using	this  pathname. Not compatible with Dart's "Web app" option, but
     might save space in a Flutter app (especially along with --zlib)

     -Y, --python
     Instead of generating C code, generate a  Python  module.	Similar  to  the
     Javascript option, this is for when you can't run your own binaries, and it
     is table-driven for fast loading.

     --no-python
     Cancels any earlier --python option in Makefile variables etc

     --reannotator=
     Shell  command  through which to pipe each word of the original text to ob-
     tain new annotation for that word. This might be useful as a quick  way  of
     generating  a  new  annotator (e.g. for a different topolect) while keeping
     the information about word separation and/or glosses from the previous  an-
     notator,  but  it is limited to commands that don't need to look beyond the
     boundaries of each word. If the command is prefixed by a  #  character,  it
     will  be given the word's existing annotation instead of its original text,
     and if prefixed by ## it will be given text#annotation. The command  should
     treat each line of its input independently, and both its input and its out-
     put should be in the encoding specified by --outcode.

     -A, --reannotate-caps
     When  using --reannotator, make sure to capitalise any word it returns that
     began with a capital on input

     --no-reannotate-caps
     Cancels any earlier --reannotate-caps option in Makefile variables etc

     --sharp-multi
     Assume annotation (or reannotator output)	contains  multiple  alternatives
     separated	by # (e.g. pinyin#Yale) and include code to select one by number
     at runtime (starting from 0). This is to save on total space when	shipping
     multiple  annotators that share the same word grouping and gloss data, dif-
     fering only in the transcription of each word.

     --no-sharp-multi
     Cancels any earlier --sharp-multi option in Makefile variables etc

     --annotation-names=
     Comma-separated list of annotation  types	supplied  to  sharp-multi  (e.g.
     Pinyin,Yale),  if you want the Android app etc to be able to name them. You
     can also  set  just  one  annotation  names  here	if  you  are  not  using
     sharp-multi.

     --annotation-map=
     Comma-separated  list  of annotation-number overrides for sharp-multi, e.g.
     7=3 to take the 3rd item if a 7th is selected

     --annotation-postprocess=
     Extra code for post-processing specific annotNo selections after retrieving
     from a sharp-multi list (@file or @url allowed)

     -o, --allow-overlaps
     Normally, the analyser avoids generating rules that could overlap with each
     other in a way that would leave the program not knowing which one to apply.
     If a short rule would cause overlaps, the analyser will prefer to	generate
     a	longer rule that uses more context, and if even the entire phrase cannot
     be made into a rule without causing overlaps then the analyser will give up
     on trying to cover that phrase. This option allows the analyser to generate
     rules that could overlap, as long as none of the overlaps would  cause  ac-
     tual problems in the example phrases. Thus more of the examples can be cov-
     ered,  at	the expense of a higher risk of ambiguity problems when applying
     the rules to other texts. See also the -y option.

     --no-allow-overlaps
     Cancels any earlier --allow-overlaps option in Makefile variables etc

     -y, --ybytes=
     Look for candidate Yarowsky seed-collocations within this number  of  bytes
     of  the end of a word. If this is set then overlaps and rule conflicts will
     be allowed when seed collocations can be used to distinguish between  them,
     and  the  analysis  is  likely  to be faster. Markup examples that are com-
     pletely separate (e.g. sentences from different sources) must have at least
     this number of (non-whitespace) bytes between them.

     --ybytes-max=
     Extend the Yarowsky seed-collocation search to check over larger ranges  up
     to  this  maximum. If this is set then several ranges will be checked in an
     attempt to determine the best one for each word, but see also  ymax-thresh-
     old and ymax-limitwords.

     --ymax-threshold=
     Limits  the length of word that receives the narrower-range Yarowsky search
     when ybytes-max is in use. For words longer than this, the search	will  go
     directly  to  ybytes-max.	This  is for languages where the likelihood of a
     word's annotation being influenced by its immediate  neighbours  more  than
     its  distant  collocations  increases  for shorter words, and less is to be
     gained by comparing different ranges when processing longer words.  Setting
     this  to  0  means  no  limit,  i.e. the full range will be explored on all
     Yarowsky checks.

     --ymax-limitwords=
     Comma-separated list of words (without annotation	markup)  for  which  the
     ybytes expansion loop should run at most two iterations. This may be useful
     to reduce compile times for very common ambiguous words that depend only on
     their immediate neighbours. Annogen may suggest words for this option if it
     finds they take inordinate time to process.

     --ybytes-step=
     The increment value for the loop between ybytes and ybytes-max

     -k, --warn-yarowsky
     Warn  when  absolutely  no distinguishing Yarowsky seed collocations can be
     found for a word in the examples

     --no-warn-yarowsky
     Cancels any earlier --warn-yarowsky option in Makefile variables etc

     -K, --yarowsky-all
     Accept Yarowsky seed collocations even from input characters that never oc-
     cur in annotated words (this might include punctuation and  example-separa-
     tion markup)

     --no-yarowsky-all
     Cancels any earlier --yarowsky-all option in Makefile variables etc

     --yarowsky-multiword
     Check  potential multiword rules for Yarowsky seed collocations also. With-
     out this option (default), only single-word rules are checked.

     --no-yarowsky-multiword
     Cancels any earlier --yarowsky-multiword option in Makefile variables etc

     --yarowsky-thorough
     Recheck Yarowsky seed collocations when  checking	if  any  multiword  rule
     would  be	needed	to reproduce the examples. This could risk 'overfitting'
     the example set.

     --no-yarowsky-thorough
     Cancels any earlier --yarowsky-thorough option in Makefile variables etc

     --yarowsky-half-thorough
     Like --yarowsky-thorough but check only what collocations occur within  the
     proposed new rule (not around it), less likely to overfit

     --no-yarowsky-half-thorough
     Cancels  any  earlier --yarowsky-half-thorough option in Makefile variables
     etc

     --yarowsky-debug=
     Report the details of seed-collocation false positives if there are a large
     number of matches and a small number of false positives, optionally with  a
     lesser  large  number of matches when the false positive doesn't cut across
     word boundaries. Default 1000:1:750 (setting a single number N  is  equiva-
     lent to 1000:N:750, where N=0 omits reporting; setting X:N is equivalent to
     X:N:X).  Occasionally these mismatches might be due to typos in the corpus,
     so it might be worth a check.

     --allow-exceptions=
     Filename (or URL) of any known exeptions for --yarowsky-debug  checks  (de-
     fault allow-exceptions.txt)

     --normalise-debug=
     When --capitalisation is not in effect. report words that are usually capi-
     talised but that have at most this number of lower-case exceptions (default
     1) for investigation of possible typos in the corpus

     --allow-caps-exceptions=
     Filename  (or URL) of any known exeptions for --normalise-debug checks (de-
     fault allow-caps-exceptions.txt)

     --debug-dir=
     Directory in which to write reports of possible typos etc (defaults to cur-
     rent directory)

     --normalise-cache=
     Optional file to use to cache the	result	of  normalisation.  Adding  .gz,
     .bz2, .xz or .bz3 for compression is acceptable.

     -1, --single-words
     Do  not  generate	any  rule longer than 1 word, although it can still have
     Yarowsky seed collocations if -y is set. This speeds up the search, but  at
     the  expense of thoroughness. You might want to use this in conjuction with
     -y to make a parser quickly.

     --no-single-words
     Cancels any earlier --single-words option in Makefile variables etc

     --max-words=
     Limits the number of words in a rule. 0 means no limit.  --single-words  is
     equivalent  to --max-words=1. If you need to limit the search time, and are
     using -y, it should suffice to use --single-words for a quick annotator  or
     --max-words=5 for a more thorough one (or try 3 if --yarowsky-half-thorough
     is in use).

     --multiword-end-avoid=
     Comma-separated  list  of	words (without annotation markup) that should be
     avoided at the end of a multiword rule (e.g. sandhi likely to depend on the
     following word)

     -d, --diagnose=
     Output some diagnostics for the specified word. Use this option to help an-
     swer "why doesn't it have a rule for...?" issues. This option  expects  the
     word  without  markup and uses the system locale (UTF-8 if it cannot be de-
     tected).

     --diagnose-limit=
     Maximum number of phrases to print diagnostics for (0 means unlimited). De-
     fault: 10

     -m, --diagnose-manual
     Check and diagnose potential failures of --manualrules

     --no-diagnose-manual
     Cancels any earlier --diagnose-manual option in Makefile variables etc

     -q, --diagnose-quick
     Ignore all phrases that do not contain the word specified by the --diagnose
     option, for getting a faster (but possibly less accurate)	diagnostic.  The
     generated annotator is not likely to be useful when this option is present.

     --no-diagnose-quick
     Cancels any earlier --diagnose-quick option in Makefile variables etc

     --priority-list=
     Instead  of  generating  an annotator, use the input examples to generate a
     list of (non-annotated) words with priority numbers, a higher number  mean-
     ing the word should have greater preferential treatment in ambiguities, and
     write  it	to this file (or compressed .gz, .bz2, .xz or .bz3 file). If the
     file provided already exists, it will be updated, thus you can amend an ex-
     isting usage-frequency list or similar (although the final numbers are pri-
     orities and might no longer match usage-frequency exactly). The purpose  of
     this  option  is  to  help if you have an existing word-priority-based text
     segmenter and wish to update its data  from  the  examples;  this	approach
     might  not  be  as  good as the Yarowsky-like one (especially when the same
     word has multiple readings to choose from), but when there are  integration
     issues  with  existing  code  you	might  at  least  be able to improve its
     word-priority data.

     -t, --time-estimate
     Estimate time to completion. The code to do this is unreliable and is prone
     to underestimate. If you turn it on, its estimate is displayed at	the  end
     of the status line as days, hours or minutes.

     --no-time-estimate
     Cancels any earlier --time-estimate option in Makefile variables etc

     -0, --single-core
     Use only one CPU core even when others are available on Unix

     --no-single-core
     Cancels any earlier --single-core option in Makefile variables etc

     --cores-command=
     Command  to run when changing the number of CPU cores in use (with new num-
     ber as a parameter); this can run a script to pause/resume any lower-prior-
     ity load

     -p, --status-prefix=
     Label to add at the start of the status line,  for  use  if  you  batch-run
     annogen  in multiple configurations and want to know which one is currently
     running

Legal considerations
     Annotator code will contain individual words  and	some  phrases  from  the
     original  corpus  (and these can be read even by people who do not have the
     unannotated version); with regards to copyright law, I expect the annotator
     code will count as an "index" to the collection, the copyright of which ex-
     ists separately to that of the original collection, but  laws  do	vary  by
     country and I am not a solicitor so please act judiciously.

     Legally  obtaining  that original annotated corpus is up to you. If you are
     in the UK the government says non-commercial text mining is allowed  (terms
     of use prohibiting non-commercial mining are unenforceable), provided you:

     1.  respect  network  stability  (i.e.  wait a long time between each down-
	 load),

     2.  connect directly to the publisher (this law  bypasses	the  publisher's
	 terms of use, not those of third-party search engines like Google),

     3.  use  the result only for mining, not for republishing the original text
	 (so you can't publish your unprocessed crawl dumps either),

     4.  and still respect any	prohibitions  against  sharing	whatever  mining
	 tools you made for the site (as this law is only about text mining, not
	 about the sharing of tools).

     Laws  outside  the  UK  are different (and I'm not a lawyer) so check care-
     fully.	Gao	et     al     2020's	 paper	   on	  "The	   Pile"
     https://arxiv.org/abs/2101.00027  claims published crawl dumps with limited
     processing might be permissible under American copyright law as transforma-
     tive fair use, but I'm not sure how legally watertight their  argument  is:
     it  might	be safer to keep unlicensed parts of the corpus private and pub-
     lish only the resulting index.

     If the website's terms  don't  actually  prohibit	writing  an  unpublished
     scraper  for non-commercial mining purposes, perhaps you won't need a legal
     exception for the crawling part--but you should still respect  their  band-
     width and do it slowly, both for moral reasons (it's the right thing to do)
     and  pragmatic  ones  (you won't want their sysadmins and service providers
     taking action against you).

Citation
     If you need to cite a peer-reviewed paper:

     Silas S. Brown. Web Annotation with Modified-Yarowsky and Other Algorithms.
     Overload 112 (December 2012) pp.4-7.

Silas S. Brown			   April 2026			      ANNOGEN(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=annogen&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help